Hadoop
Hadoop
搭建环境
伪分布式:
-
解压:tar -zxvf hadoop.... -C /usr/local/src
-
mv hadoop.... hadoop
-
修改环境变量:vim /root/.bash_profile
添加:
export HADOOP_HOME=/usr/local/src/hadoop
export PATH=\(PATH:\)HADOOP_HOME/bin:$HADOOOP_HOME/sbin
-
source /root/.bash_profile
-
修改配置文件( hadoop/etc/hadoop):
-
vim hadoop-env.sh 修改jdk路径
-
vim core-site.xml
fs.defaultFS hdfs://hadoop01:9000 hadoop.tmp.dir /opt/hadoop/data -
vim hdfs-site.xml
dfs.replication 1 -
vim mapred-env.sh 修改jdk路径
-
复制mapred-site.xml.e..... 为mapred-site.xml
命令为:cp mapred-site.xml.e..... mapred-site.xml
-
vim mapred-site.xml
mapreduce.framework.name yarn -
vim yarn-env.sh 修改jdk路径
-
vim yarn-site.xml
yarn.resourcemanager.hostname hadoop01 yarn.nodemanager.aux-services mapreduce_shuffle -
配置完成后,格式化namenode: hadoop namenode -format
或: hdfs namenode -format
-
启动hadoop,并前往浏览器查看状况(访问路径:http://192.168.233.110:50070/)
-
启动;
简单粗暴型:
start-all.sh
单独启动namenode 、datanode 、resourcemanager:
start-dfs.sh start-yarn.sh
单一节点启动:
namenode
hadoop-daemon.sh start namenode
datanode
hadoop-daemon.sh start datanode
-
-
分布式
此为在伪分布式基础上配置:
-
删除/opt下的hadoop(伪分布式的日志及数据在这个文件中)
-
修改hdfs-site.xml文件,将副本数量修改为:3 (根据自己的需要改)
-
修改slaves文件,修改为datanode节点(即把所有机器的名字放进去,一个占一行)
如:
master hadoop01 hadoop02 -
重新格式化namenode : hadoop namenode -format
-
把hadoop完整的拷贝到其它机器上:
[root@hadoop01 src]# scp -r hadoop/ hadoop03:$PWD
-
环境变量/root/.bash_profile也拷贝给其它机器(记得source)
-
启动hadoop: start-all.sh
-
前往浏览器查看状况
hadoopHA高可用
- vim core-site.xml
fs.defaultFS
hdfs://myns1/
hadoop.tmp.dir
/opt/hadoop/data
ha.zookeeper.quorum
hadoop01:2181,hadoop02:2181,hadoop03:2181
- vim hdfs-site.xml
fs.replication
3
dfs.nameservices
myns1
dfs.ha.namenodes.myns1
nn1,nn2
dfs.namenode.rpc-address.myns1.nn1
hadoop01:9000
dfs.namenode.http-address.myns1.nn1
hadoop01:50070
dfs.namenode.rpc-address.myns1.nn2
hadoop03:9000
dfs.namenode.http-address.myns1.nn2
hadoop03:50070
dfs.namenode.shared.edits.dir
qjournal://hadoop01:8485;hadoop03:8485;hadoop02:8485/myns1
dfs.journalnode.edits.dir
/opt/hadoop/journaldata
dfs.ha.automatic-failover.enabled
true
dfs.client.failover.proxy.provider.myns1
org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider
dfs.ha.fencing.methods
sshfence
shell(/bin/true)
dfs.ha.fencing.ssh.private-key-files
/root/.ssh/id_rsa
dfs.ha.fencing.ssh.connect-timeout
30000
dfs.webhdfs.enabled
true
- vim mapred-site.xml
mapreduce.framework.name
yarn
mapreduce.jobhistory.address
hadoop01:10020
mapreduce.jobhistory.webapp.address
hadoop01:19888
- vim yarn-site.xml
yarn.resourcemanager.ha.enabled
true
yarn.resourcemanager.cluster-id
yrc
yarn.resourcemanager.ha.rm-ids
rm1,rm2
yarn.resourcemanager.hostname.rm1
hadoop01
yarn.resourcemanager.hostname.rm2
hadoop03
yarn.resourcemanager.zk-address
hadoop01:2181,hadoop03:2181,hadoop02:2181
yarn.nodemanager.aux-services
mapreduce_shuffle
yarn.log-aggregation.retain-seconds
86400
yarn.resourcemanager.recovery.enabled
true
yarn.resourcemanager.store.class
org.apache.hadoop.yarn.server.resourcemanager.recovery.ZKRMStateStore
- vim slaves
将集群datanode节点机器名放在这里,换行即可,如:
hadoop01
hadoop02
hadoop03
-
远程拷贝到其它机器:
scp -r /usr/local/src/hadoop/etc/hadoop hadoop02:/usr/local/src/hadoop/etc
-
搭好后启动步骤:
-
分别在每个机器上启动zookeeper集群
bin/zkServer.sh start
成功标志:jps后看到 QuorumPeerMain 进程
-
每个机器上启动 journalnode (最好是奇数台机器)
hadoop-daemon.sh start journalnode
jps 查看 journalnode进程
-
在一个namenode节点上进行格式化(配置了两个namenode机器,只需要一台电脑上格式化)
格式化之前需要先删除之前hadoop留下的日志和数据文件,方法可见分布式处开头
删除之后再进行格式化工作
hadoop namenode -format
-
格式化后namenode的机器上找到存放数据的data目录,然后拷贝到另外一个namenode机器的data目录下,保持初始元数据一致。
scp -r data hadoop03:/opt/hadoop/
-
在任何一个namenode上执行zkfc -formatZK操作(#格式化zookeeper):
hdfs zkfc -formatZK
-
start-dfs.sh
-
start-yarn.sh(在自己配置的对应任何一台resourcemanager机器上执行)
-
测试:
-
分别在每个机器上jps查看状态
-
分别访问两个namenode机器上的50070界面,查看状态是否一个是Active,另外一个是Standby
-
测试访问一下yarn集群
-
可用测试,测试主备切换
方法: 将active状态的namenode进程干掉,kill -9 xxxxid
再使用单节点启动方式启动namenode:hadoop-daemon.sh start namenode
-
-
-
搭建成功后第二次启动:
-
首先在每一台机器上启动zookeeper
zkServer.sh satrt
-
让后直接 start-all.sh
补充:
-
在另外一台resourceManager机器上单独启动resourceManager进程:
yarn-daemon.sh start resourcemanager
-
yarn高可用测试和hadoop一样,访问的端口是8088
hadoop-daemon.sh start namenode
-
启动历史服务器
mr-jobhistory-daemon.sh start historyserver -
yarn-daemon.sh start nodemanager
-
yarn-daemon.sh start resourcemanager
-
然后两台机器分别启动resourcemanager即可
-
命令方式查看hadoop状态:hdfs haadmin -getServiceState nn2
-
命令方式查看yarn状态:yarn rmadmin -getServiceState rm1
hdfs常用命令
- 上传文件:hdfs dfs -put /opt/test/xxx.txt /test1
- 删除文件夹:hdfs dfs -rm -r /test
- 创建文件夹:hdfs dfs -mkdir /test
- 下载文件到本地:hdfs dfs -get /user.txt /opt
- 查看/test目录下所有文件的总行数:hdfs dfs -cat /test1/* | wc -l
- 查看文件后前20行:hdfs dfs -cat /datas/access_log | head -20
- 查看文件后30行:hdfs dfs -cat /datas/access_log | tail -30
- 查看文件第3行到第10行:hdfs dfs -cat /datas/access_log | sed -n '3,10p'