Hadoop是一个开源的Apache项目,允许对大规模,分布于不同网络的数据集进行并行处理
它由HDFS(hadoop distibuted file system )和hadoop YARN组成
HDFS:处理不同的节点上的大量数据
hadoop YARN :任务调度框架,调度所有节点上的数据处理
ubuntu 14.4 hadoop 2.8.5
单机设置
安装java
下载地址
https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html
jdk-8u191-linux-x64.tar.gz
解压到目标文件
tar -zxvf jdk-8u191-linux-x64.tar.gz -C /usr/java/
配置环境变量
vim /etc/profile
文末添加
JAVA_HOME=/usr/java/jdk1.8.0_161/CLASSPATH=$JAVA_HOME/lib/PATH=$PATH:$JAVA_HOME/binexport PATH JAVA_HOME CLASSPATH使环境变量生效
source /etc/profile
下载Hadoop
https://hadoop.apache.org/releases.html
binary形式
使用SHA-256方式验证我们下载的压缩包没有被篡改。,运行以下命令:
shasum -a 256 hadoop-2.8.5.tar.gz
出现结果
F9C726DF 693CE2DA A4107886 F603270D 66E7257F 77A92C98 86502D6C D4A884A4 hadoop-2.8.5.tar.gz将出现的结果同下载页面的checksum中对应的SHA256的值做对比,忽略空格和大小写,一致则说明没被修改
然后解压
tar -zxvf hadoop-2.8.5.tar.gz
移动
mv hadoop-2.8.5 /usr/local/hadoop
修改环境变量
/usr/local/hadoop/etc/hadoop/hadoop-env.sh
将JAVA_HOME改为之前设置的值
运行 /usr/local/hadoop/bin/hadoop ,就可以看到hadoop的使用说明
测试
运行自带的Mapreduce项目,创建一个input目录,然后复制hadoop的配置文件到input目录,将这些文件作为数据
mkdir ~/input
cp /usr/local/hadoop/etc/hadoop/*.xml ~/input
/usr/local/hadoop/bin/hadoop jar /usr/local/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.8.5.jar grep ~/input ~/grep_example 'principal[.]*'
我们使用上述语句运行mapreduce的hadoop-mapreduce-examples 项目中的grep项目,以~/input作为输入目录,~/grep_example作为输出目录。这个grep项目将会计算匹配的迭代单词或常规表达。最终,我们使用一个常规表达来统计其中的principal的出现次数在里面或者结尾的声明语句中,这个表达式是大小敏感的,所以如果出现在句子的开头被大写了,将不会被统计。
查看统计结果
cat ~/grep_example/*
6 principal 1 principal.
hadoop 集群设置
一个master node对分布的文件系统有 索引和 调度资源分配的作用 ,node-master将会在该导文中担任这个角色,拥有两个守护进程:
NameNode:管理分布的文件系统 并 记录集群中数据块存储的地址
ResourceManager: 管理YARN作业,维护调度和在子节点上执行任务
Slave node存储具体数据,提供处理权限来运行作业,选取 node1,node2,它们也有两个守护进程
DataNode :管理节点上实际存储的数据,也叫NameNode
NodeMangager :管理节点上任务的执行
配置系统
在每个节点上创建host文件:
节点之间通过他们的名字交流,编辑 /etc/hosts 将三个节点的IP添加进去
192.0.2.1 node-master 192.0.2.2 node1 192.0.2.3 node2添加认证key
master node通过ssh连接来连到其他节点管理它们
创建ssh-key :
ssh-keygen -b 4096
复制key到各个服务器(前提是保证个服务器上有hadoop用户,输入相应密码即可
ssh-copy-id -i $HOME/.ssh/id_rsa.pub hadoop@node-master ssh-copy-id -i $HOME/.ssh/id_rsa.pub hadoop@node1 ssh-copy-id -i $HOME/.ssh/id_rsa.pub hadoop@node2下载解压hadoop到/home/hadoop/hadoop
编辑/home/hadoop/.profile ,添加
PATH=/home/hadoop/hadoop/bin:/home/hadoop/hadoop/sbin:$PATHnode-master的配置就完成了,子节点照例配置
安装好java后,编辑/hadoop/etc/hadoop/hadoop-env.sh,设置 JAVA_HOME为Java的安装目录
export JAVA_HOME=${JAVA_HOME}设置NameNode ,每个节点上的/hadoop/etc/hadoop/core-site.xml到node-master:9000
<?xml version="1.0" encoding="UTF-8"?> <?xml-stylesheet type="text/xsl" href="configuration.xsl"?> <configuration> <property> <name>fs.default.name</name> <value>hdfs://node-master:9000</value> </property> </configuration>设置HDFS的路径,编辑 hadoop/etc/hadoop/hdfs-site.xml
<configuration> <property> <name>dfs.namenode.name.dir</name> <value>/home/hadoop/data/nameNode</value> </property> <property> <name>dfs.datanode.data.dir</name> <value>/home/hadoop/data/dataNode</value> </property> <property> <name>dfs.replication</name> <value>1</value> </property> </configuration>最后一个属性dfs.replication表示集群上每个节点上的数据的复制次数,该次数不应该大于实际子节点数,这里也可设置为2
设置YARN的作业计划
1.。将mapred-site.xml.template 重命名为 mapred-site.xml
cd ~/hadoop/etc/hadoop mv mapred-site.xml.template mapred-site.xml2.编辑 mapred-site.xml
<configuration> <property> <name>mapreduce.framework.name</name> <value>yarn</value> </property> </configuration>
设置YARN,编辑 yarn-site.xml
<configuration> <property> <name>yarn.acl.enable</name> <value>0</value> </property> <property> <name>yarn.resourcemanager.hostname</name> <value>node-master</value> </property> <property> <name>yarn.nodemanager.aux-services</name> <value>mapreduce_shuffle</value> </property> </configuration>配置slaves,编辑hadoop/etc/hadoop/slaves,内容为
node1
node2
配置内存分配
默认的内存分配对于RAM小于8GB的机器的内存分配比较不友好,下面将提供一个2GB 的RAM的内存分配样例
内存分配特性
一个YARN作业运行需要两种资源:
一个Application Master(AM) :负责管理应用 和 协调集群上分布的执行器
一些执行器 :由AM创建来实际运行作业 , 对于MapReduce类型的作业,他们将并行的执行 map或reduce操作
这两者都运行在子节点上的container中,每个子节点都运行着一个NodeManager 守护进程,负责container的创建。
主节点上的ResourceManager管理着集群上的所有节点的container分配,根据吞吐量需求和当前情况。
要保证集群的正常运行 ,有四种资源需要被合适的分配:
1.单个节点上的container应被分配的内存 ,要比其他三种大,比整个RAM小,否者container分配将被驳回,应用将失败 。configured in yarn-site.xml with yarn.nodemanager.resource.memory-mb
2.单个节点的的container允许消耗的最大与最小内存 ,如果一个container消耗的大于最大值将会使分配失败,并将永远被分配为最小值的倍数。configured in yarn-site.xml with yarn.scheduler.maximum-allocation-mb 和 yarn.scheduler.minimum-allocation-mb
3.ApplicationMaster应该被分配多少内存, 这是一个恒定值,应与container的最大允许值相适应。configured in mapred-site.xml with yarn.app.mapreduce.am.resource.mb
4.每个map与reduce操作应被分配多少内存, 应该小于container的最大值 。configured in mapred-site.xml with properties mapreduce.map.memory.mband mapreduce.reduce.memory.mb
2GB的RAM的配置样例
PropertyValueyarn.nodemanager.resource.memory-mb1536yarn.scheduler.maximum-allocation-mb1536yarn.scheduler.minimum-allocation-mb128yarn.app.mapreduce.am.resource.mb512mapreduce.map.memory.mb256mapreduce.reduce.memory.mb256
编辑yarn-site.xml ,添加如下内容
<property> <name>yarn.nodemanager.resource.memory-mb</name> <value>1536</value> </property> <property> <name>yarn.scheduler.maximum-allocation-mb</name> <value>1536</value> </property> <property> <name>yarn.scheduler.minimum-allocation-mb</name> <value>128</value> </property> <property> <name>yarn.nodemanager.vmem-check-enabled</name> <value>false</value> </property>最后一个属性 yarn.nodemanager.vmem-check-enabled ,禁用虚拟内存,能防止在JDK8上的container分配。
编辑mapred-site.xml ,添加 如下内容
<property> <name>yarn.app.mapreduce.am.resource.mb</name> <value>512</value> </property> <property> <name>mapreduce.map.memory.mb</name> <value>256</value> </property> <property> <name>mapreduce.reduce.memory.mb</name> <value>256</value> </property>
复制master上的配置文件到子节点上(子节点之前的操作是 复制master上的hadoop压缩包,解压)
scp ~/hadoop/etc/hadoop/* hadoop@node1:/home/hadoop/hadoop/etc/hadoop/etc/hadoop/
像其他典型的文件系统一样 HDFS需要被格式化,在master节点上
~/hadoop/bin/hdfs namenode -format
运行HDFS
~/hadoop/sbin/start-dfs.sh
查看启动的进程
$JAVA_HOME/bin/jps
正常情况下,node-master上应有 nodename , jps, secondarynodename , ; node1,node2 上应有 datanode ,jps .
通过日志,看到启动namenode时遇到绑定IP失败
遇到异常java.net.BindException: Problem binding to [hadoop21:8031] java.net.BindException,根据提示https://wiki.apache.org/hadoop/BindException
将site-core.xml中的node-master改为0.0.0.0,就ok了。
停止HDFS
~/hadoop/sbin/stop-dfs.sh
管理HDFS集群
~/hadoop/bin/hdfs dfsadmin -report 将会显示所有运行的DataNode信息
hdfs dfsadmin -help可以查看所有可用命令
或者在浏览器上输入 http://node-master-IP:50070 通过网页查看比较友好的管理控制台。
从HDFS中 放入与读取数据
创建supergroup目录,所有没有指定上级目录的操作都会以该目录作为上级目录
~/hadoop/bin/hdfs dfs -mkdir -p /user/hadoop
查看目录下的文件
~/hadoop/bin/hadoop fs -ls /
可以查看根目录下的所有目录
创建目录books将自动在/user/hadoop/下创建
~/hadoop/bin/hdfs dfs -mkdir books
将数据放入books中
~/hadoop/bin/hdfs dfs -put alice.txt holmes.txt frankenstein.txt books
查看book目录中文件
~/hadoop/bin/hdfs dfs -ls books
将hdfs文件系统中的一个文件移动到本地文件系统
~/hadoop/bin/hdfs dfs -cat books/alice.txt
更多的HDFS文件操作命令见:
https://hadoop.apache.org/docs/current/hadoop-project-dist/hadoop-common/FileSystemShell.html
集群中的一个服务器作为NameNode ,另一个服务器作为专门的资源管理器ResourceManager。这些是管理者,其他的服务器(例入web app代理服务器,mapreducce历史服务器)通常不是运行在专用的硬件上就是在共享的设备上,取决于上传和下载
集群上剩下的服务器同时作为DataNode和NodeManager
hadoop有两种典型的配置文件:
只读配置:core-default.xml, hdfs-default.xml, yarn-default.xml and mapred-default.xml
网站专用配置:etc/hadoop/core-site.xml, etc/hadoop/hdfs-site.xml, etc/hadoop/yarn-site.xml etc/hadoop/mapred-site.xml
你可以通过设置分布的服务器上的 bin/目录下的etc/hadoop/hadoop-env.sh and etc/hadoop/yarn-env.sh来控制hadoop 脚本
要配置hadoop集群就要配置hadoop守护进行执行的环境变量和配置参数
HDFS守护进程有NameNode,SecondaryNameNode和DataNode.
YARN的守护进程有ResourceManager, NodeManager 和WebAppProxy
如果要使用Mapreduce,那么MapReduce作业历史服务将启动,对于大型的安装,这些通常运行在不同的机器上。
配置hadoop守护进程的环境
管理员应该可以编辑 etc/hadoop/hadoop-env.sh 可选的 etc/hadoop/mapred-env.sh 和 etc/hadoop/yarn-env.sh 来个性化hadoop守护进程的环境
至少应该设置正确的JAVA_HOME
DaemonEnvironment VariableNameNodeHADOOP_NAMENODE_OPTSDataNodeHADOOP_DATANODE_OPTSSecondary NameNodeHADOOP_SECONDARYNAMENODE_OPTSResourceManagerYARN_RESOURCEMANAGER_OPTSNodeManagerYARN_NODEMANAGER_OPTSWebAppProxyYARN_PROXYSERVER_OPTSMap Reduce Job History ServerHADOOP_JOB_HISTORYSERVER_OPTS例如让Namenode使用parallelGC,则需要在hadoop-env.sh中添加 export HADOOP_NAMENODE_OPTS="-XX:+UseParallelGC"
其他有用的配置参数为
HADOOP_PID_DIR 守护进程的进程id文件保存的目录
HADOOP_LOG_DIR 守护进程的日志文件保存的目录
HADOOP_HEAPSIZE/YARN_HEAPSIZE 允许最大存储量MB, 默认为1000即1000M
通常应该设置HADOOP_PID和HADOOP_LOG_DIR这样它们就只能被运行hadoop守护进行的用户修改,避免潜在的连接攻击。
HADOOP_PREFIX也应该设置在系统范围的环境变量中 /etc/profile :
HADOOP_PREFIX=/path/to/hadoop
export HADOOP_PREFIX
DaemonEnvironment VariableResourceManagerYARN_RESOURCEMANAGER_HEAPSIZENodeManagerYARN_NODEMANAGER_HEAPSIZEWebAppProxyYARN_PROXYSERVER_HEAPSIZEMap Reduce Job History ServerHADOOP_JOB_HISTORYSERVER_HEAPSIZE配置hadoop的守护进程
etc/hadoop/core-site.xml
ParameterValueNotesfs.defaultFSNameNode URIhdfs://host:port/io.file.buffer.size131072Size of read/write buffer used in SequenceFiles.etc/hadoop/hdfs-site.xml配置NameNode
ParameterValueNotesdfs.namenode.name.dirPath on the local filesystem where the NameNode stores the namespace and transactions logs persistently.If this is a comma-delimited list of directories then the name table is replicated in all of the directories, for redundancy.dfs.hosts / dfs.hosts.excludeList of permitted/excluded DataNodes.If necessary, use these files to control the list of allowable datanodes.dfs.blocksize268435456HDFS blocksize of 256MB for large file-systems.dfs.namenode.handler.count100More NameNode server threads to handle RPCs from large number of DataNodes.
配置DataNode
ParameterValueNotesdfs.datanode.data.dirComma separated list of paths on the local filesystem of a DataNode where it should store its blocks.If this is a comma-delimited list of directories, then data will be stored in all named directories, typically on different devices.etc/hadoop/yarnsite.xml
配置ResourceManager和NodeManager
ParameterValueNotesyarn.acl.enabletrue / falseEnable ACLs? Defaults to false.yarn.admin.aclAdmin ACLACL to set admins on the cluster. ACLs are of for comma-separated-usersspacecomma-separated-groups. Defaults to special value of * which means anyone. Special value of just space means no one has access.yarn.log-aggregation-enablefalseConfiguration to enable or disable log aggregation配置ResourceManager:
转载于:https://www.cnblogs.com/Ting-light/p/9872403.html