软件版本
- hadoop-2.5.0-cdh5.3.6
- centos6.5 64-bit
伪分布式环境搭建:
创建用户(hadoop)
-
添加用户
useradd hadoop -
修改密码
passwd hadoop -
赋予sudo权限
chmod u+w /etc/sudoers vi /etc/sudoers hadoop ALL=(ALL) ALL(制表符分割) chmod u-w /etc/sudoers
修改主机名
hostname lvmama
vi /etc/sysconfig/network
NETWORKING=yes
HOSTNAME=lvmama
vi /etc/hosts
配置ssh免密码登录
ssh-keygen -t rsa
cat .ssh/id_rsa.pub >>.ssh/authorized_keys
chmod 600 .ssh/authorized_keys
ssh lvmama
jdk安装
sudo mkdir /opt/softs/
sudo chown hadoop:hadoop /opt/softs/
tar -zxvf jdk
ln -s /opt/softs/jdk /opt/jdk
sudo vi /etc/profile
export JAVA_HOME=/opt/jdk
export CLASSPATH=.:$JAVA_HONE/lib
export PATH=$PATH:$JAVA_HOME/bin
source /etc/profile
hadoop安装
配置文档相关网址:
http://archive.cloudera.com/cdh5/cdh/5/hadoop-2.5.0-cdh5.3.6/
下载地址:
http://archive.cloudera.com/cdh5/cdh/5/
tar -zxvf hadoop
mkdir ~/hdfs
ln -s /opt/softs/hadoop* /opt/hadoop
vi $HADOOP_HOME/etc/hadoop/hadoop-env.sh
export JAVA_HOME=/opt/jdk
export HADOOP_PID_DIR=/data/hadoop/hdfs/tmp
export HADOOP_LOG_DIR=/data/hadoop/logs
export HADOOP_SSH_OPTS="-p 22"
vi $HADOOP_HOME/etc/hadoop/mapred-env.sh
export HADOOP_MAPRED_PID_DIR=/home/hadoop/hdfs/tmp
vi $HADOOP_HOME/etc/hadoop/yarn-env.sh
export YARN_PID_DIR=/home/hadoop/hdfs/tmp
vi $HADOOP_HOME/etc/hadoop/core-site.xml
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://192.168.113.111:9000/</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>file://home/hadoop/hdfs/tmp</value>
</property>
</configuration>
vi $HADOOP_HOME/etc/hadoop/hdfs-site.xml
<configuration>
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>file://home/hadoop/hdfs/name</value>
</property>
<property>
<name>dfs.namenode.data.dir</name>
<value>file://home/hadoop/hdfs/data</value>
</property>
<property>
<name>dfs.permissions.enabled</name>
<value>false</value>
</property>
</configuration>
cp $HADOOP_HOME/etc/hadoop/mapred-site.xml{.template,}
vi $HADOOP_HOME/etc/hadoop/mapred-site.xml
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>
vi $HADOOP_HOME/etc/hadoop/yarn-site.xml
<configuration>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
</configuration>
vi $HADOOP_HOME/etc/hadoop/slaves(datanode相关)
lvmama
sudo vi /etc/profile
export HADOOP_HOME=/opt/hadoop
export HADOOP_PREFIX=$HADOOP_HOME
export HADOOP_COMMON_HOME=$HADOOP_PREFIX
export HADOOP_CONF_DIR=$HADOOP_PREFIX/etc/hadoop
export HADOOP_HDFS_HOME=$HADOOP_PREFIX
export HADOOP_MAPRED_HOME=$HADOOP_PREFIX
export HADOOP_YARN_HOME=$HADOOP_PREFIX
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
source /etc/profile
hadoop version
启动
hdfs namenode -format
start-all.sh(start-dfs.sh and start-yarn.sh)
验证是否成功
jps
1568 DataNode
1480 NameNode
1976 NodeManager
2137 Jps
1707 SecondaryNameNode
1884 ResourceManager
web界面:http://lvmama:50070
(外网需关闭防火墙)
关闭命令:service iptables stop
永久关闭防火墙:chkconfig iptables off
查看防火墙关闭状态:service iptables status
分布式安装
主机准备 centos6
vim /etc/hosts
192.168.1.1 bigdata-01
192.168.1.2 bigdata-02
192.168.1.3 bigdata-03
关闭防火墙和SELINUX
setenforce 0
sed -i 's#SELINUX=enforcing#SELINUX=disabled#g' /etc/selinux/config
grep SELINUX=disabled /etc/selinux/config
# centos6
service iptables stop(关闭防火墙)
chkconfig iptables off(开机不自启动)
# centos7
systemctl disable firewalld.service
systemctl stop firewalld.service
systemctl status firewalld.service
免密钥登录(这个一定要, 不然你启动的时候, 老是要让你输入各种密码)
ssh-keygen -t rsa
ssh-copy-id bigdata-01 ; ssh-copy-id bigdata-02 ; ssh-copy-id bigdata-03
修改文件句柄数
vim /etc/security/limits.conf
#---------custom-----------------------
#
* soft nofile 240000
* hard nofile 655350
* soft nproc 240000
* hard nproc 655350
#-----------end-----------------------
source /etc/security/limits.conf
ulimit -n
24000
ntp服务器同步时间
[root@bigdata-01 soft]# yum install ntp -y
cp -a /etc/ntp.conf{,.bak}
vim /etc/ntp.conf
restrict default kod nomodify notrap nopeer noquery # restrict、default定义默认访问规则, nomodify禁止远程主机修改本地服务器
restrict 127.0.0.1 # 这里的查询是服务器本身状态的查询。
restrict -6 ::1
#server 0.centos.pool.ntp.org iburst # 注掉官方自带的网络站点
#server 1.centos.pool.ntp.org iburst
#server 2.centos.pool.ntp.org iburst
#server 3.centos.pool.ntp.org iburst
server ntp1.aliyun.com # 目标服务器网络位置
server 127.127.1.0 # local clock,当服务器与公用的时间服务器失去联系时, 就是连不上互联网时, 以局域网内的时间服务器为客户端提供时间同步服务。
fudge 127.127.1.0 stratum 10
# 如果计划任务有时间同步, 先注释, 两种用法会冲突。
crontab –e
\*/30 * * * * /usr/sbin/ntpdate ntp1.aliyun.com > /dev/null 2>&1;/sbin/hwclock -w
systemctl start ntpd.service
systemctl enable ntpd.service
systemctl status ntpd.service
[root@bigdata-02 soft]# systemctl stop ntpd.service
[root@bigdata-02 soft]# systemctl disable ntpd.service
[root@bigdata-02 soft]# yum install ntpdate -y
[root@bigdata-02 soft]# /usr/sbin/ntpdate 192.168.1.1
[root@bigdata-02 soft]# crontab –e
\*/30 * * * * /usr/sbin/ntpdate 192.168.1.1 > /dev/null 2>&1;/sbin/hwclock -w
systemctl restart crond.service
systemctl status crond.service
jdk
echo -e "# java\nexport JAVA_HOME=/opt/jdk\nexport PATH=\${PATH}:\${JAVA_HOME}/bin:\${JAVA_HOME}/jre/bin\nexport CLESSPATH=.:\${JAVA_HOME}/lib:\${JAVA_HOME}/jre/lib" > /etc/profile
source /etc/profile
zookeeper
echo -e "\n# zookeeper\nexport ZK_HOME=/data/zookeeper\nexport PATH=\$PATH:\$ZK_HOME/bin" > /etc/profile
source /etc/profile
[root@bigdata-01 soft]# cp $ZK_HOME/conf/zoo_sample.cfg $ZK_HOME/conf/zoo.cfg
[root@bigdata-01 soft]# vim $ZK_HOME/conf/zoo.cfg
dataDir=/data/zookeeper/data
dataLogDir=/data/zookeeper/log
server.1=bigdata-01:2888:3888
server.2=bigdata-02:2888:3888
server.3=bigdata-03:2888:3888
分发并创建链接
[root@bigdata-01 soft]# echo 1 > /data/zookeeper/data/myid
[root@bigdata-02 soft]# echo 2 > /data/zookeeper/data/myid
[root@bigdata-03 soft]# echo 3 > /data/zookeeper/data/myid
[root@bigdata-* soft]# zkServer.sh start
hadoop
[root@bigdata-* soft]# echo -e "# hadoop\nexport HADOOP_HOME=/opt/hadoop\nexport HADOOP_PREFIX=\$HADOOP_HOME\nexport HADOOP_COMMON_HOME=\$HADOOP_PREFIX\nexport HADOOP_CONF_DIR=\$HADOOP_PREFIX/etc/hadoop\nexport HADOOP_HDFS_HOME=\$HADOOP_PREFIX\nexport HADOOP_MAPRED_HOME=\$HADOOP_PREFIX\nexport HADOOP_YARN_HOME=\$HADOOP_PREFIX\nexport PATH=\$PATH:\$HADOOP_HOME/bin:\$HADOOP_HOME/sbin" >> /etc/profile
[root@bigdata-* soft]# source /etc/profile
[root@bigdata-01 soft]# vim $HADOOP_HOME/etc/hadoop/hadoop-env.sh
export JAVA_HOME=/opt/jdk
export HADOOP_SSH_OPTS="-p 22"
[root@bigdata-01 soft]# vim $HADOOP_HOME/etc/hadoop/mapred-env.sh
export JAVA_HOME=/opt/jdk
[root@bigdata-01 soft]# vim $HADOOP_HOME/etc/hadoop/yarn-env.sh
export JAVA_HOME=/opt/jdk
[root@bigdata-01 soft]# vim $HADOOP_HOME/etc/hadoop/core-site.xml
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://bigdata-01:9000/</value>
<description>NameNode URI, 192.168.1.100为服务器IP地址, 其实也可以使用主机名</description>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/data/hadoop/tmp</value>
</property>
<property>
<name>hadoop.http.staticuser.user</name>
<value>root</value>
</property>
<property>
<name>ha.zookeeper.quorum</name>
<value>bigdata-01:2181,bigdata-02:2181,bigdata-03:2181</value>
</property>
<property>
<name>ha.zookeeper.session-timeout.ms</name>
<value>10000</value>
</property>
<property>
<name>fs.trash.checkpoint.interval</name>
<value>1440</value>
<discription>以分钟为单位的垃圾回收检查间隔。</discription>
</property>
<property>
<name>hadoop.security.authentication</name>
<value>simple</value>
<discription>可以设置的值为 simple (无认证) 或者 kerberos(一种安全认证系统)</discription>
</property>
<property>
<name>fs.trash.interval</name>
<value>1440</value>
<discription>以分钟为单位的垃圾回收时间, 垃圾站中数据超过此时间, 会被删除。如果是0, 垃圾回收机制关闭。</discription>
</property>
</configuration>
[root@bigdata-01 soft]# vim $HADOOP_HOME/etc/hadoop/hdfs-site.xml
<configuration>
<property>
<name>dfs.replication</name>
<value>2</value>
</property>
<property>
<name>dfs.blocksize</name>
<value>134217728</value>
</property>
<property>
<name>dfs.permissions.enabled</name>
<value>true</value>
<description>true:权限检查, false:权限检查关闭,其他行为不变. 从一个参数值切换到另一个参数值不会改变模式、所有者或文件或目录组。</description>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>/data/bigdata/hdfs/name</value>
<discription>持久存储名字空间,事务日志的本地路径</discription>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>/data/bigdata/hdfs/data</value>
<discription>datanode存放数据的路径,单个节点单配,多个目录逗号分隔</discription>
</property>
<property>
<name>dfs.datanode.max.transfer.threads</name>
<value>16384</value>
<discription>指定用于在DataNode间传输block数据的最大线程数</discription>
</property>
<property>
<name>dfs.datanode.balance.bandwidthPerSec</name>
<value>52428800</value>
<description>Specifies the maximum amount of bandwidth that each datanode can utilize for the balancing purpose in term of the number of bytes per second.</description>
</property>
<property>
<name>dfs.datanode.balance.max.concurrent.moves</name>
<value>50</value>
<description>增加DataNode上转移block的Xceiver的个数上限。</description>
</property>
<property>
<name>dfs.nameservices</name>
<value>ns1</value>
<description>HDFS 命名服务的逻辑名称,可用户自己定义,比如 mycluster,注意,该名称将被基于 HDFS 的系统使用,比如 Hbase 等,此外,需要你想启用 HDFS Federation,可以通过该 参数指定多个逻辑名称,并用“,”分割。</description>
</property>
<property>
<name>dfs.ha.namenodes.ns1</name>
<value>nn1,nn2</value>
</property>
<property>
<name>dfs.namenode.rpc-address.ns1.nn1</name>
<value>bigdata-01:8020</value>
<discription>nn1的RPC通信地址, nn1所在地址</discription>
</property>
<property>
<name>dfs.namenode.http-address.ns1.nn1</name>
<value>bigdata-01:50070</value>
<discription>nn1的http通信地址, 外部访问地址</discription>
</property>
<property>
<name>dfs.namenode.rpc-address.ns1.nn2</name>
<value>bigdata-02:8020</value>
<discription>nn2的RPC通信地址, nn2所在地址</discription>
</property>
<property>
<name>dfs.namenode.http-address.ns1.nn2</name>
<value>bigdata-02:50070</value>
<discription>nn2的http通信地址, 外部访问地址</discription>
</property>
<property>
<name>dfs.namenode.journalnode</name>
<value>node1:8485;node2:8485;node3:8485</value>
<discription>journalnode为了解决hadoop单点故障,给namenode做元数据同步的,奇数个,一般3个或5个</discription>
</property>
<property>
<name>dfs.namenode.shared.edits.dir</name>
<value>qjournal://${dfs.namenode.journalnode}/ns1</value>
<description>指定NameNode的元数据在JournalNode日志上的存放位置(一般和zookeeper部署在一起)</description>
</property>
<property>
<name>dfs.journalnode.edits.dir</name>
<value>/data/hadoop/journal</value>
<description>指定JournalNode在本地磁盘存放数据的位置</description>
</property>
<property>
<name>dfs.client.failover.proxy.provider.ns1</name>
<value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
<description>客户端通过代理访问namenode, 访问文件系统, HDFS 客户端与Active 节点通信的Java 类, 使用其确定Active 节点是否活跃</description>
</property>
<property>
<name>dfs.ha.fencing.methods</name>
<value>sshfence</value>
<description>这是配置自动切换的方法, 有多种使用方法, 具体可以看官网, 在文末会给地址, 这里是远程登录杀死的方法, 这个参数的值可以有多种, 你也可以换成shell(/bin/true)试试, 也是可以的, 这个脚本do nothing 返回0</description>
</property>
<property>
<name>dfs.ha.fencing.ssh.private-key-files</name>
<value>/root/.ssh/id_rsa</value>
<description>这个是使用sshfence隔离机制时才需要配置ssh免登陆</description>
</property>
<property>
<name>dfs.ha.fencing.ssh.connect-timeout</name>
<value>30000</value>
<description>配置sshfence隔离机制超时时间, 这个属性同上, 如果你是用脚本的方法切换, 这个应该是可以不配置的</description>
</property>
<property>
<name>dfs.ha.automatic-failover.enabled</name>
<value>true</value>
<description>开启自动故障转移, 如果你没有自动故障转移, 这个可以先不配</description>
</property>
</configuration>
[root@bigdata-01 soft]# vim $HADOOP_HOME/etc/hadoop/mapred-site.xml
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<property>
<name>mapreduce.jobhistory.address</name>
<value>bigdata-01:10020</value>
</property>
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>bigdata-01:19888</value>
</property>
</configuration>
[root@bigdata-01 soft]# vim $HADOOP_HOME/etc/hadoop/yarn-site.xml
<configuration>
<property>
<name>yarn.app.mapreduce.am.scheduler.connection.wait.interval-ms</name>
<value>5000</value>
<discription>schelduler失联等待连接时间</discription>
</property>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.resourcemanager.connect.retry-interval.ms</name>
<value>5000</value>
<description>How often to try connecting to the ResourceManager.</description>
</property>
<property>
<name>yarn.resourcemanager.ha.enabled</name>
<value>true</value>
<discription>是否启用RM HA,默认为false(不启用)</discription>
</property>
<property>
<name>yarn.resourcemanager.ha.automatic-failover.enabled</name>
<value>true</value>
<discription>是否启用自动故障转移。默认情况下,在启用HA时,启用自动故障转移。</discription>
</property>
<property>
<name>yarn.resourcemanager.ha.automatic-failover.embedded</name>
<value>true</value>
<discription>启用内置的自动故障转移。默认情况下,在启用HA时,启用内置的自动故障转移。</discription>
</property>
<property>
<name>yarn.resourcemanager.cluster-id</name>
<value>cluster1</value>
<discription>集群的Id,elector使用该值确保RM不会做为其它集群的active。</discription>
</property>
<property>
<name>yarn.resourcemanager.ha.rm-ids</name>
<value>rm1,rm2</value>
<discription>RMs的逻辑id列表,rm管理资源器;一般配两个,一个起作用 其他备用;用逗号分隔,如:rm1,rm2 </discription>
</property>
<property>
<name>yarn.resourcemanager.hostname.rm1</name>
<value>bigdata-01</value>
<discription>RM的节点1的hostname</discription>
</property>
<property>
<name>yarn.resourcemanager.scheduler.address.rm1</name>
<value>${yarn.resourcemanager.hostname.rm1}:8030</value>
<discription>RM对AM暴露的地址,AM通过地址想RM申请资源,释放资源等</discription>
</property>
<property>
<name>yarn.resourcemanager.resource-tracker.address.rm1</name>
<value>${yarn.resourcemanager.hostname.rm1}:8031</value>
<discription>RM对NM暴露地址,NM通过该地址向RM汇报心跳,领取任务等</discription>
</property>
<property>
<name>yarn.resourcemanager.address.rm1</name>
<value>${yarn.resourcemanager.hostname.rm1}:8032</value>
<discription>RM对客户端暴露的地址,客户端通过该地址向RM提交应用程序等</discription>
</property>
<property>
<name>yarn.resourcemanager.admin.address.rm1</name>
<value>${yarn.resourcemanager.hostname.rm1}:8033</value>
<discription>RM对管理员暴露的地址.管理员通过该地址向RM发送管理命令等</discription>
</property>
<property>
<name>yarn.resourcemanager.webapp.address.rm1</name>
<value>${yarn.resourcemanager.hostname.rm1}:8088</value>
<discription>RM对外暴露的web http地址,用户可通过该地址在浏览器中查看集群信息</discription>
</property>
<property>
<description>The https adddress of the RM web application.</description>
<name>yarn.resourcemanager.webapp.https.address.rm1</name>
<value>${yarn.resourcemanager.hostname.rm1}:8090</value>
</property>
<property>
<name>yarn.resourcemanager.hostname.rm2</name>
<value>bigdata-02</value>
</property>
<property>
<name>yarn.resourcemanager.scheduler.address.rm2</name>
<value>${yarn.resourcemanager.hostname.rm2}:8030</value>
</property>
<property>
<name>yarn.resourcemanager.resource-tracker.address.rm2</name>
<value>${yarn.resourcemanager.hostname.rm2}:8031</value>
</property>
<property>
<name>yarn.resourcemanager.address.rm2</name>
<value>${yarn.resourcemanager.hostname.rm2}:8032</value>
</property>
<property>
<name>yarn.resourcemanager.admin.address.rm2</name>
<value>${yarn.resourcemanager.hostname.rm2}:8033</value>
</property>
<property>
<name>yarn.resourcemanager.webapp.address.rm2</name>
<value>${yarn.resourcemanager.hostname.rm2}:8088</value>
</property>
<property>
<name>yarn.resourcemanager.webapp.https.address.rm2</name>
<value>${yarn.resourcemanager.hostname.rm2}:8090</value>
</property>
<property>
<name>yarn.resourcemanager.recovery.enabled</name>
<value>true</value>
<discription>默认值为false,也就是说resourcemanager挂了相应的正在运行的任务在rm恢复后不能重新启动</discription>
</property>
<property>
<name>yarn.resourcemanager.store.class</name>
<value>org.apache.hadoop.yarn.server.resourcemanager.recovery.ZKRMStateStore</value>
<discription>状态存储的类</discription>
</property>
<property>
<name>ha.zookeeper.quorum</name>
<value>node1:2181,node2:2181,node3:2181</value>
</property>
<property>
<name>yarn.resourcemanager.zk-address</name>
<value>${ha.zookeeper.quorum}</value>
<discription>ZooKeeper服务器的地址(主机:端口号),既用于状态存储也用于内嵌的leader-election。</discription>
</property>
<property>
<name>yarn.nodemanager.address</name>
<value>${yarn.nodemanager.hostname}:8041</value>
<discription>The address of the container manager in the NM.</discription>
</property>
<property>
<name>yarn.log-aggregation-enable</name>
<value>true</value>
</property>
<property>
<name>yarn.log-aggregation.retain-seconds</name>
<value>106800</value>
</property>
</configuration>
[root@bigdata-01 soft]# vim $HADOOP_HOME/etc/hadoop/slaves
bigdata-01
bigdata-02
bigdata-03
分发并创建链接
[root@bigdata-* soft]# $HADOOP_HOME/sbin/hadoop-daemon.sh start journalnode
[root@bigdata-01 soft]# hdfs namenode -format
[root@bigdata-01 soft]# hadoop-daemon.sh start namenode
[root@bigdata-02 soft]# hdfs namenode -bootstrapStandby
[root@bigdata-02 soft]# hadoop-daemon.sh start namenode
[root@bigdata-01 soft]# hdfs zkfc -formatZK
[root@bigdata-01 soft]# hadoop-daemon.sh start zkfc
[root@bigdata-01 soft]# start-dfs.sh
[root@bigdata-01 soft]# start-yarn.sh
[root@bigdata-03 soft]# yarn-daemon.sh start resourcemanager
验证高可用
[root@bigdata-01 soft]# jps
16704 JournalNode
16288 NameNode
16433 DataNode
23993 QuorumPeerMain
17241 NodeManager
18621 Jps
16942 DFSZKFailoverController
[root@bigdata-01 soft]# kill -9 16288
启动命令(sbin目录下)
start-all.sh # 启动所有的Hadoop守护进程。包括NameNode、 Secondary NameNode、DataNode、JobTracker、 TaskTrack
stop-all.sh # 停止所有的Hadoop守护进程。包括NameNode、 Secondary NameNode、DataNode、JobTracker、 TaskTrack
start-dfs.sh # 启动Hadoop HDFS守护进程NameNode、SecondaryNameNode和DataNode
stop-dfs.sh # 停止Hadoop HDFS守护进程NameNode、SecondaryNameNode和DataNode
hadoop-daemons.sh start namenode # 单独启动NameNode守护进程
hadoop-daemons.sh stop namenode # 单独停止NameNode守护进程
hadoop-daemons.sh start datanode # 单独启动DataNode守护进程
hadoop-daemons.sh stop datanode # 单独停止DataNode守护进程
hadoop-daemons.sh start secondarynamenode # 单独启动SecondaryNameNode守护进程
hadoop-daemons.sh stop secondarynamenode # 单独停止SecondaryNameNode守护进程
start-mapred.sh 启动Hadoop MapReduce # 守护进程JobTracker和TaskTracker
stop-mapred.sh 停止Hadoop MapReduce # 守护进程JobTracker和TaskTracker
hadoop-daemons.sh start jobtracker # 单独启动JobTracker守护进程
hadoop-daemons.sh stop jobtracker # 单独停止JobTracker守护进程
hadoop-daemons.sh start tasktracker # 单独启动TaskTracker守护进程
hadoop-daemons.sh stop tasktracker # 单独启动TaskTracker守护进程
distribute-exclude.sh
作用:将需要排除的datanode节点主机文件发布到所有NN机器上去。
参数:
前置条件:集群必须启动;需要在hdfs-site.xml文件中指定dfs.host.exclude,默认为空,如果需要,可以指定其他文件(绝对路径)。
httpfs.sh
作用:启动/停止webhdfs,主要是提供一个基于HTTP的RESTful操作接口,基本包括hdfs文件系统的所有命令。
参数:debug,start,stop等。
前置条件:hdfs相关服务必须启动;需要在core-site.xml文件中指定hadoop.proxyuser.#suer#.hosts(代理用户可以代理的ip)和hadoop.proxyuser.#suer#.groups(代理用户所属组)。
hadoop-daemon.sh
作用:启动/停止当前节点的hdfs相关的服务或者执行相应的脚本命令。
命令格式:hadoop-daemon.sh [--config <conf-dir>] [--hosts hostlistfile] [-script script] (start/stop) (namenode|secondarynamenode|datanode|journalnode|dfs|dfsadmin|fsck|balancer|zkfc|其他)
yarn-daemon.sh
作用:启动/停止当前节点的yarn相关的服务。
命令格式:yarn-daemon.sh [--config <conf-dir>] [--hosts hostlistfile] (start/stop) (resourcemanager|nodemanager)
注意:yarn-daemons.sh(多台机器)在yarn-daemon.sh(一台机器)的基础上,通知其他机器执行命令。
start-dfs.sh/stop-dfs.sh
作用:启动/停止当前节点的hdfs相关的服务。
命令格式:start-dfs.sh
流程:调用hadoop-daemons.sh脚本启动namenode,datanode,secondarynamenode,zkfc。
start-yarn.sh/stop-yarn.sh
作用:启动/停止当前节点的yarn相关的服务。
命令格式:start-yarn.sh
流程:调用yarn-daemons.sh脚本启动resourcemanager,nodemanager。
start-all.sh/stop-all.sh
作用:启动/停止当前节点的hdfs和yarn相关的服务。
命令格式:start-all.sh
流程:调用start-dfs.sh/stop-dfs.sh和start-yarn.sh/stop-yarn.sh
操作命令
hdfs命令
用户命令:
查看文件列表: hdfs dfs -ls /home/hadoop/aaron
递归查看文件列表: hdfs dfs -lsr /home/hadoop/aaron
创建文件目录: hdfs dfs -mkdir /home/hadoop/aaron/newDir
-p递归创建
删除文件: hdfs dfs -rm /home/hadoop/aaron/needDelete
删除空目录: hdfs dfs -rmdir /home/hadoop/aaron
递归删除目录: hdfs dfs -rmr /home/hadoop/aaron
上传文件: hdfs dfs –put /home/hadoop/newFile /user/hadoop/aaron/
hdfs dfs –copyFromLocal /home/hadoop/newFile /user/hadoop/aaron/
hdfs dfs –moveFromLocal /home/hadoop/newFile /user/hadoop/aaron/
下载文件: hdfs dfs –get /home/hadoop/aaron/newFile /home/hadoop/newFile
hdfs dfs –copyToLocal /home/hadoop/newFile /user/hadoop/aaron/
hdfs dfs –moveToLocal /home/hadoop/newFile /user/hadoop/aaron/
查看文件: hdfs dfs –cat /home/hadoop/newFile
解析文件: hdfs dfs –text /home/hadoop/newFile
文件重命名: hdfs dfs –mv /home/hadoop/test.txt /home/hadoop/ok.txt
查看命令详情: hdfs dfs -help rm
管理员命令:
检测磁盘异常信息: hdfs fsck <path>
动态刷新dfs.hosts和dfs.hosts.exclude配置: hdfs dfsadmin -refreshNodes
集群基本信息: hdfs dfsadmin -report
安全模式: hdfs dfsadmin -safemode get/enter/leave
查看namenode帮助: hdfs namenode -h
查看namenode帮助: hdfs datanode -h
提交MAPREDUCE JOB: hadoop jar /home/hadoop/job.jar [jobMainClass] [jobArgs]
hadoop命令(主要是讲hdfs、yarn和mapred全部命令进行整合):
杀死某个JOB: hadoop job -kill [job-id]
hdfs文件所属用户、所属组等读写执行控制权限
用下面的命令修改文件的权限、文件所有者,文件所属组:
groupadd Hadoop # 添加一个hadoop组
usermod -a -G Hadoop Larry # 将当前用户加入到hadoop组
vim /etc/sudoers # 将hadoop组加入到sudoer
在 root ALL=(ALL) ALL 后加 Larry ALL=(ALL) ALL
修改hadoop目录的权限
chown -R Larry:Hadoop /home/Larry/Hadoop # <所有者:组 文件>
chmod -R 755 /home/Larry/Hadoop
修改hdfs的权限
hdfs dfs -chmod -R 755 /Larry
hdfs dfs -ls /
修改hdfs文件的所有者
sudo -u hdfs /data/hdfs/hadoop-2.7.3/bin/hdfs dfs -chown -R Larry /Larry
hdfs dfs -copyFromLocal <localsrc> URI # 拷贝本地文件到hdfs
hdfs dfs -cat file:///file3 /user/hadoop/file4#将路径指定文件的内容输出到stdout
hdfs dfs -chgrp [-R] GROUP URI # 改变文件的所属组
hdfs dfs -chmod [-R] 755 URI # 改变用户访问权限
hdfs dfs -chown [-R] [OWNER][:[GROUP]] URI [URI ] # 修改文件的所有者
hdfs dfs -copyToLocal URI localdst # 拷贝hdfs文件到本地
hdfs dfs -cp URI [URI …] <dest> # 拷贝hdfs文件到其它目录
hdfs dfs -du URI [URI …] # 显示目录中所有文件的大小
hdfs dfs -getmerge <src> <localdst> [addnl] # 合并文件到本地目录
HDFS特性:
- 高容错高可靠性
- 高可扩展性
- 高吞吐
MapReduce结构:
开发环境搭建:
并行编程模型和计算框架,主要有resourcemanager和nodemanager两大类构成。
resourcemanager负责集群资源管理,nodemanager负责节点的资源管理。
运行MapReduce任务的时候,会产生ApplicationMaster和Container,ApplicationMaster负责向resourcemanager节点进行资源的申请并控制任务的执行,Container是最基本的资源单位,MapReduce的map和reduce均在其上运行。
MapReduce编程思想
map负责将任务分解为多个任务,reduce负责将多个map任务的中间结果合并为最终结果map流程:
setup -> map … map … map ->cleanureduce流程:setup -> reduce … reduce … reduce ->cleanuMapReduce流程:input<k1,v1> -> map<k2,v2> -> shuffle<k2,list<v2,v2» -> reduce<k3,v3> -> output
用户自定义数据类型:
用途:
- 可以被序列化进行网络传输和文件存储
- 在shuffle阶段进行大小比较
实现:
- 采用hadoop的接口Writable
- 采用java接口Comparable
hadoop将这两个接口结合提供了WritableComparable接口
内置数据类型:
- MapWritable
- LongWritable
- IntWritable
- BooleanWritable
- ByteWritable
- DoubleWritable
- FloatWritable
- Text
- NullWritable等
用户定制数据输入格式化器:
InputFormat: 描述MR作业的数据输入格式规范。
MapReduce的数据输入格式:
TextInputFormat(lineRecordReader) (默认), KeyValueTextInputFormat, CombineTextInputFormat, SequenceFileInputFormat, DBInputFormat等。
InputFormat详解:
全称: org.apache.hadoop.mapce.InputFormat
方法:
getSplits: 返回值是分片信息集合;作用:通过分片个数确定mapper的个数,根据分片信息中的数据地址信息决定是否采用数据本地化策略。
createRecordReader: 创建一个具体读取数据并构造key/value键值对的RecordReader实例对象。
RecordReader详解:
全称: org.apache.hadoop.mapreduce.RecordReader
方法:
initialize:根据对应的分片信息进行初始化操作
nextKeyValue:是否有下一个键值对
getCurrentKey:获取当前key
getCurrentValue:获取当前Value
getProgress:进度信息
close:关闭资源读取相关连接
shuffle阶段说明:
包括map阶段的combine(压缩), group, sort, partition以及reduce阶段的合并排序。 map阶段通过shuffle后会将输出数据按照reduce的分区分文件的保存, 文件内容是按照定义的sort进行排序好的, map阶段完成后会通知ApplicationMaster, 然后AM会通知reduce进行数据的拉起,在拉取过程中进行reduce端的shuffle过程。
用户自定义combiner:
实现类Reducer, 以map的输出作为combiner的输入key, value一致, 不一致不能直接使用。 job.setCombinerClass设置combiner的处理类, mapreduce框架不保证一定会调用该类的方法。
用户自定义Partitioner:
用于确定map输出的key、value对应的处理reduce的哪个节点。 默认mapreduce任务reduce个数为1, 此时partition其实没用效果, 但是当我们吧reduce个数修改为多个时partition就会决定key所对应的reduce的节点序号(从零开始)。 job.setPartitionerClass指定Partitioner类,默认情况下使用HashPartitioner.
用户自定义Group:
GroupingComparator是用于将map输出的<key,value>进行分组组合成<key,list
用户自定义sort:
SortComparator
用户自定义reduce的shuffle:
ShuffleComsumerPlugin
问题总结:
问题1
java.net.ConnectException: Call From DESKTOP-0Q62KM2/192.168.113.1 to 192.168.113.111:8020 failed on connection exception: java.net.ConnectException: Connection refused: no further information;
解决
未解决
问题
java.io.IOException: Incompatible clusterIDs in /home/hadoop/hdfs/tmp/dfs/data: namenode clusterID = CID-541d; datanode clusterID = CID-7bc7
解决2
关闭集群,删除hdfs下所有文件,重新启动集群。
问题3
java.io.FileNotFoundException: C:\Users\Àº½\AppData\Local\Temp\capture256.pro (系统找不到指定的路径。)
找不到或无法加载主类 hadoop.mr.wordcount.WordCountRunner
java.lang.NoClassDefFoundError: org/apache/hadoop/conf/Configuration
解决
pom.xml 去除
问题
FATAL DataNode: Initialization failed for Block pool
解决
删除hdfs下的所有文件,重新格式化
问题
Unable to load native-hadoop library for your platform… using builtin-java classes where applicable
解决
http://dl.bintray.com/sequenceiq/sequenceiq-bin/下载对应的编译版本 tar -xvf hadoop-native-64-*.tar -C /opt/hadoop/lib/native 会出现:java.lang.UnsatisfiedLinkError:org.apache.hadoop.util.NativeCrc32.nativeComputeChunkedSumsByteArray问题
问题
MISSING 1 blocks of total size 135366 B
解决
将丢失的块删除 hdfs fsck -delete