1、环境准备
系统:
centos6.5
JDK1.8
创建hadoop安装目录目录
mkdir /bdapps tar xf hadoop-2.7.5.tar.gz -C /bdapps/ cd /bdapps/ ln -sv hadoop-2.7.5 hadoop cd hadoop
创建环境脚本
vim /etc/profile.d/hadoop.sh
内容如下:
export HADOOP_PREFIX=/bdapps/hadoop export PATH=$PATH:${HADOOP_PREFIX}/bin:${HADOOP_PREFIX}/sbin export HADOOP_YARN_HOME=${HADOOP_PREFIX} export HADOOP_MAPPERD_HOME=${HADOOP_PREFIX} export HADOOP_COMMON_HOME=${HADOOP_PREFIX} export HADOOP_HDFS_HOME=${HADOOP_PREFIX}
2、创建用户和组
出于安全等目的,通常需要用特定的用户来运行hadoop不同的守护进程,例如,以hadoop为组,分别用三个用户yarn、hdfs、和mapred来运行相应的进程
groupadd hadoop useradd -g hadoop yarn useradd -g hadoop hdfs useradd -g hadoop mappred
创建数据和日志目录
hadoop需要不同权限的数据和日志目录,这里以/data/hadoop/hdfs为hdfs数据存储目录。
确保hdfs用户对/data/目录有权限
mkdir -pv /data/hadoop/hdfs/{nn,dn,snn} chown -R hdfs:hadoop /data/hadoop/hdfs/
然后,在hadoop的安装目录中创建logs目录,并修改hadoop所有文件的属主和属组
cd /bdapps/hadoop/ mkdir logs chmod g+w logs chown -R yarn:hadoop ./*
3、配置hadoop
etc/hadoop/core-site.xml
core-site.xml文件包含了NameNode主机地址以及其监听RPC端口等信息,对于伪分布式模型的安装来说,其主机地址为localhost。NameNode默认使用的RPC端口为8020。其简要的配置内容如下所示
<configuration> <property> <name>fs.defaultFS</name> <value>hdfs://localhost:8020</value> <final>true</final> </property> </configuration>
etc/hadoop/hdfs-site.xml
hdfs-site.xml主要用于配置HDFS相关的属性,例如复制因子(即数据块的副本数)、NN和DN用于存储数据的目录等。数据块的副本数对于伪分布式的Hadoop应该为1,而NN和DN用于存储的数据的目录为前面的步骤中专门为其创建的路径。另外,前面的步骤中也为SNN创建了相关的目录,这里也一并配置其为启用状态。
<configuration> <property> <name>dfs.replication</name> <value>1</value> </property> <property> <name>dfs.namenode.name.dir</name> <value>file:///data/hadoop/hdfs/nn</value> </property> <property> <name>dfs.datanode.data.dir</name> <value>file:///data/hadoop/hdfs/dn</value> </property> <property> <name>fs.checkpoint.dir</name> <value>file:///data/hadoop/hdfs/snn</value> </property> <property> <name>fs.checkpoint.edits.dir</name> <value>file:///data/hadoop/hdfs/snn</value> </property> </configuration>
解释:
dfs.replication 副本数量为1,伪分布式部署是将所有角色部署在本地,所以副本只在本地保留一份
dfs.namenode.name.dir namenode的路径
dfs.datanode.data.dir 数据节点的路径
dfs.dcheckpoint.dir 检查点文件存放路径
fs.checkpoint.edit.dir 检查点编辑目录
注意:如果需要其他用户对hdfs有写入权限,还需要在hdfs-site.xml添加一项属性定义。
<property> <name>dfs.permissions</name> <value>false</value> </property>
这个配置意思是不对dfs的权限做严格检查,这样其他用户就有写入权限
etc/hadoop/mapred-site.xml
mapred-site.xml文件用于配置集群的MapReduce framework,此处应该制定使用yarn,另外的可用值还有local和classic。mapred-site.xml.template,只需要将其复制mapred-site.xml即可。
cp etc/hadoop/mapred-site.xml.template etc/hadoop/mapred-site.xml
其配置示例如下面的内容
<configuration> <property> <name>mapreduce.framework.name</name> <value>yarn</value> </property> </configuration>
etc/hadoop/yarn-site.xml
yarn-site.xml 用于配置YARN进程及YARN的相关属性,首先需要指定ResourceManager守护进程的主机和监听的端口,对于伪分布式模型来讲,其主机为localhost,
默认的端口为8032;其次需要指定ResourceManager使用的scheduler,以及NodeManager的辅助服务。一个简要的配置示例如下所示:
<configuration> <property> <name>yarn.resourcemanager.address</name> <value>localhost:8032</value> </property> <property> <name>yarn.resourcemanager.scheduler.address</name> <value>localhost:8030</value> </property> <property> <name>yarn.resourcemanager.resource-tracker.address</name> <value>localhost:8031</value> </property> <property> <name>yarn.resourcemanager.admin.address</name> <value>localhost:8033</value> </property> <property> <name>yarn.resourcemanager.webapp.address</name> <value>localhost:8088</value> </property> <property> <name>yarn.nodemanager.aux-services</name> <value>mapreduce_shuffle</value> </property> <property> <name>yarn.nodemanager.auxservices.mapreduce_shuffle.class</name> <value>org.apache.hadoop.mapred.ShuffleHandler</value> </property> <property> <name>yarn.resourcemanager.scheduler.class</name> <value>org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.CapacityScheduler</value> </property> </configuration>
etc/hadoop/hadoop-env.sh和etc/hadoop/yarn-env.sh
hadoop的各守护进程依赖于JAVA_HOME的环境变量,如果有类似于前面步骤中通过/etc/profile.d/java.sh全局配置定义的JAVA_HOME变量即可正常使用。不过如果像我hadoop定义依赖到的特定JAVA环境,也可以编辑这两个脚本文件,为其JAVA_HOME取消注释并配置合适的值即可。此外,hadoop大多数守护进程默认使用的堆大小为1GB,但现实应用中,可能需要对其各类进程的堆内存大小做出调整,这只需要编辑此两者文件中的相关环境变量值即可。例如HADOOP_HEAPSIZE、HADOOP_JOB_HISTORY_HEAPSIZE、JAVA_HEAP_SIZE和YARN_HEAP_SIZE等。
slave文件
slave文件存储了当前集群所有slave节点的列表,对于伪分布式模型,其文件内容仅应该为localhost,这特的确是这个文件的默认值。因此,为分布式模型中,次文件的内容保持默认即可。
4、格式化HDFS
在HDFS的NN启动之前需要先初始化其用于存储数据的目录。如果hdfs-site.xml中dfs.namenode.name.dir属性指定的目录不存在,格式化命令会自动创建之;如果事先存在,请确保其权限设置正确,此时格式操作会清除其内部的所有数据并重新建立一个新的文件系统,需要以hdfs用户的身份执行如下命令
hdfs namenode -format
hdfs 命令
查看dhfs文件系统/目录上有哪些文件和目录,默认是为空
$ hdfs dfs -ls /
在hdfs文件系统上创建测试目录test
$ hdfs dfs -mkdir /test $ hdfs dfs -ls / Found 1 items drwxr-xr-x - hdfs supergroup 0 2018-03-26 13:48 /test
注意:刚才创建的文件的属组是supergroup,并不属于hadoop,所有其他属组为hadoop的用户对改文件没有写入权限,前面hdfs-site.xml文件中有一个配置是
dfs.permissions,如果设置为false,则可赋予hadoop属组的用户写入权限
将本地/etc/fstab 文件上传到hdfs文件系统 /test目录中
$ hdfs dfs -put /etc/fstab /test/fstab $ hdfs dfs -ls /test Found 1 items -rw-r--r-- 1 hdfs supergroup 223 2018-03-26 13:55 /test/fstab
查看dhfs文件系统上某个文件内容 使用cat命令
$ hdfs dfs -cat /test/fstab UUID=dbcbab6c-2836-4ecd-8d1b-2da8fd160694 / ext4 defaults 1 1 tmpfs /dev/shm tmpfs defaults 0 0 devpts /dev/pts devpts gid=5,mode=620 0 0 sysfs /sys sysfs defaults 0 0 proc /proc proc defaults 0 0 dev/vdb1 none swap sw 0 0
5、启动hadoop
切换到hdfs用户
su - hdfs
hadoop2的启动等操作可通过其位于sbin路径下的专用脚本进行
NameNode:hadoop-daemon.sh(start|stop)namenode
DataNode: hadoop-daemon.sh (start|stop) datanode
Secondary NameNode: hadoop-daemon.sh (start|stop) secondarynamenode
ResourceManager: yarn-daemon.sh(start|stop) nodemanager
启动HDFS服务
HDFS有三个守护进程:namenode、datanode和secondarynamenode,他们都表示通过hadoop-daemon.sh脚本启动或停止。以hdfs用户执行相关命令即可,如下所示:
启动namenode
hadoop-daemon.sh start namenode starting namenode, logging to /bdapps/hadoop/logs/hadoop-hdfs-namenode-SRV-OPS01-LINTEST01.out $ jps 99466 NameNode 99566 Jps
启动secondarynamenode
hadoop-daemon.sh start secondarynamenode starting secondarynamenode, logging to /bdapps/hadoop/logs/hadoop-hdfs-secondarynamenode-SRV-OPS01-LINTEST01.out $ jps 100980 SecondaryNameNode 101227 Jps 99466 NameNode
启动datanode
$ hadoop-daemon.sh start datanode starting datanode, logging to /bdapps/hadoop/logs/hadoop-hdfs-datanode-SRV-OPS01-LINTEST01.out $ jps 101617 DataNode 100980 SecondaryNameNode 101767 Jps 99466 NameNode
启动yarn集群
切换成yarn用户登录系统,再启动服务
YARN有两个守护进程:resourcemanager和nodemanager,它们都可以通过yarn-daemon.sh脚本启动或者停止。以yarn用户执行相关命令即可。
启动resourcemanager
yarn-daemon.sh start resourcemanager starting resourcemanager, logging to /bdapps/hadoop/logs/yarn-yarn-resourcemanager-SRV-OPS01-LINTEST01.out $ jps 110218 Jps 109999 ResourceManager
启动nodemanager
yarn-daemon.sh start nodemanager starting nodemanager, logging to /bdapps/hadoop/logs/yarn-yarn-nodemanager-SRV-OPS01-LINTEST01.out $ jps 111061 Jps 110954 NodeManager 109999 ResourceManager
6、Web UU
HDFS和YARN ResourceManager各自提供了一个Web接口,通过这个接口可以检查HDFS集群以及YARN集群的相关状态信息,它们的访问接口分别为如下所求,具体使用中,需要将
NameNodeHost和ReourceManageHost 分别改为其相应的主机地址。
HDFS-NameNode http://<ResourceManagerHost>:50070/
YARN-ResourceManager http://<ResourceManagerHost>:8088/
注意:yarn-site.xml文件中yarn.resourcemanager.webapp.address属性的值如果定义为“localhost:8088”, 则其WebUI仅监听于127.0.0.1地址上的8088端口
7运行测试程序
Hadoop-YARN 自带了许多样例程序,它们位于hadoop安装路径下的share/hadoop/mapreduce/目录里,其中的hadoop-mapreduce-examples可用作mapreduce程序测试
yarn jar /bdapps/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.5.jar wordcount /yarn/fstab /yarn/fstab.out
对hdfs文件系统上/yarn/fstab文件作单词统计,统计结果存放在/yarn/fstab.out文件中
18/03/26 16:07:01 INFO client.RMProxy: Connecting to ResourceManager at localhost/127.0.0.1:8032 18/03/26 16:07:02 INFO input.FileInputFormat: Total input paths to process : 1 18/03/26 16:07:02 INFO mapreduce.JobSubmitter: number of splits:1 18/03/26 16:07:02 INFO mapreduce.JobSubmitter: Submitting tokens for job: job_1522044437617_0001 18/03/26 16:07:02 INFO impl.YarnClientImpl: Submitted application application_1522044437617_0001 18/03/26 16:07:02 INFO mapreduce.Job: The url to track the job: http://localhost:8088/proxy/application_1522044437617_0001/ 18/03/26 16:07:02 INFO mapreduce.Job: Running job: job_1522044437617_0001 18/03/26 16:07:10 INFO mapreduce.Job: Job job_1522044437617_0001 running in uber mode : false 18/03/26 16:07:10 INFO mapreduce.Job: map 0% reduce 0% 18/03/26 16:07:15 INFO mapreduce.Job: map 100% reduce 0% 18/03/26 16:07:20 INFO mapreduce.Job: map 100% reduce 100% 18/03/26 16:07:20 INFO mapreduce.Job: Job job_1522044437617_0001 completed successfully 18/03/26 16:07:21 INFO mapreduce.Job: Counters: 49 File System Counters FILE: Number of bytes read=272 FILE: Number of bytes written=243941 FILE: Number of read operations=0 FILE: Number of large read operations=0 FILE: Number of write operations=0 HDFS: Number of bytes read=320 HDFS: Number of bytes written=191 HDFS: Number of read operations=6 HDFS: Number of large read operations=0 HDFS: Number of write operations=2 Job Counters Launched map tasks=1 Launched reduce tasks=1 Data-local map tasks=1 Total time spent by all maps in occupied slots (ms)=2528 Total time spent by all reduces in occupied slots (ms)=2892 Total time spent by all map tasks (ms)=2528 Total time spent by all reduce tasks (ms)=2892 Total vcore-milliseconds taken by all map tasks=2528 Total vcore-milliseconds taken by all reduce tasks=2892 Total megabyte-milliseconds taken by all map tasks=2588672 Total megabyte-milliseconds taken by all reduce tasks=2961408 Map-Reduce Framework Map input records=6 Map output records=36 Map output bytes=367 Map output materialized bytes=272 Input split bytes=97 Combine input records=36 Combine output records=19 Reduce input groups=19 Reduce shuffle bytes=272 Reduce input records=19 Reduce output records=19 Spilled Records=38 Shuffled Maps =1 Failed Shuffles=0 Merged Map outputs=1 GC time elapsed (ms)=153 CPU time spent (ms)=1290 Physical memory (bytes) snapshot=447442944 Virtual memory (bytes) snapshot=4177383424 Total committed heap usage (bytes)=293076992 Shuffle Errors BAD_ID=0 CONNECTION=0 IO_ERROR=0 WRONG_LENGTH=0 WRONG_MAP=0 WRONG_REDUCE=0 File Input Format Counters Bytes Read=223 File Output Format Counters Bytes Written=191
查看统计结果
$ hdfs dfs -cat /yarn/fstab.out/part-r-00000
/ 1 /dev/pts 1 /dev/shm 1 /proc 1 /sys 1 0 10 1 2 UUID=dbcbab6c-2836-4ecd-8d1b-2da8fd160694 1 defaults 4 dev/vdb1 1 devpts 2 ext4 1 gid=5,mode=620 1 none 1 proc 2 sw 1 swap 1 sysfs 2 tmpfs 2
问题:
1、其他服务器无法连接hdfs的8020端口服务?
这是因为core-site.xml文件中配置的是localhost:8020,本机只会监听在127.0.0.1地址上,要改成服务器实际IP才行
2、其他用户在hdfs文件系统中没有写入权限?
默认只有hadoop用户(以hadoop用户启动服务)有写入权限,如果希望其他用户有写入权限,可以在hdfs-site.xml文件中加入以下配置
<property> <name>dfs.permissions</name> <value>false</value> </property>
或者修改hdfs文件系统上某个目录的权限:
例如:
转载于:https://blog.51cto.com/zengestudy/2091214