Hadoop常用命令
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Hadoop常用命令相关的知识,希望对你有一定的参考价值。
网络配置
hostname 查看珠玑名
vim /etc/sysconfig/network 设置主机名
ifconfig 查看ip情况
vim /etc/sysconfig/network-scripts/ifcfg-eth0 设置网络
DEVICE="eth0" 接口名(设备、网卡)
BOOTPROTO=STATIC IP的配置方法(static:固定IP,dhcp:,none:手动)
ONBOOT=yes 系统启动的时候网络端口是否有效
IPADDR=192.168.1.2 IP网址
GATEWAY=192.168.1.0 网关
DNS1=8.8.8.8 DNS服务器
service network restart 重启网卡服务
service network start 开始网卡服务
service network stop 停止网卡服务
ifconfig eth0 up|down 启用和关闭制定的网卡
ifconfig 查看配置的ip信息是否生效
vim /etc/hosts 设置珠玑和ip映射关系
192.168.1.2 master
192.168.1.3 slave1
192.168.1.4 slave2
ping master
service iptables stop 关闭防火墙
chkconfig iptables off 关闭自启动防火墙服务
配置SSH
rpm -qa | grep openssh 查看是否安装了ssh服务
rpm -qa | grep rsync 查看是否安装了rsync服务
yum install ssh 安装ssh协议
yum install rsync rsync是一个远程数据同步工具
service sshd restart 启动sshd服务
ssh-keygen -t rsa -p ' ' 生成无密码密钥对(存放路径是/home/Haddop/.ssh)
cat ~/.ssh/id_rsa.pub >>~/.ssh/authorized_keys 将id_rsa.pub追加到授权的key中
chmod 600 ~/.ssh/authorized_keys 授予读写权限
vim /etc/ssh/sshd_config 修改sshd服务的配置文件
RSAAuthentication yes # 启用 RSA 认证
PubkeyAuthentication yes # 启用公钥私钥配对认证方式
AuthorizedKeysFile .ssh/authorized_keys # 公钥文件路径(和上面生成的文件同)
service sshd restart 重启sshd服务,是修改生效
ssh master 严验证ssh登录(第一次会要求输入密码)
单点对多点的SSH无密码登录
ssh-keygen
ssh-copy-id [email protected] 格式是"ssh-copy-id 用户名@主机名"
ssh-copy-id [email protected] 将本机名的公钥复制到远程机器的authorized_keys文件
安装JDK
root用户登录
mkdir /usr/java 创建/usr/java目录
cp /root/Downloads/jdk-6u31-linux-i584.bin /usr/java 复制
chmod +x jdk-6u31-linux-i584.bin 赋予执行的权限
./jdk-6u31-linux-i584.bin 执行解压过的bin文件
rm -rf jdk-6u31-linux-i584.bin 删除jdk安装文件
vim /etc/profile
在尾部添加以下内容:
# set java environment
export JAVA_HOME=/usr/java/jdk1.6.0_31/
export CLASSPATH=.:$CLASSPATH:$JAVA_HOME/lib:$JRE_HOME/lib
export PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin
source /etc/profile 使profile的配置文件生效
java -version 验证jdk是否安装成功
安装剩余机器:
scp /usr/java/jdk1.6.0_31/ [email protected]$i:/usr/java;
使用shell脚本安装:
for i in $(seq 1 100);
do echo slave$i;
scp /usr/javajdk1.6.0_31/ [email protected]$i:/usr/java;
done
profile环境变量的配置文件要可以配置好后一次发送到所有集群中
Hadoop集群的安装
以root用户登录
cp /root/Downloads/Hadoop-1.0.0.tar.gz /usr
cd /usr
tar -zxvf Hadoop-1.0.0.tar.gz 解压tar.gz的安装包
mv Hadoop-1.0.0.tar.gz hadoop 文件夹重命名
chown -R Hadoop:Hadoop Hadoop hadoop文件的属主重新分配,-R是递归,hadoop文件夹分配给hadoop组下的hadoop用户
rm -rf Hadoop-1.0.0.tar.gz 删除安装文件
配置Hadoop的环境变量
vim /etc/profile
export HADOOP_HOME=/usr/Hadoop
export PATH=$PATH:$HADOOP_HOME/bin
source /etc/profile 使配置生效
配置hadoop
配置hadoop-env.sh(文件位于/usr/Hadoop/bin/conf)
vim /usr/Hadoop/bin/conf/Hadoop-env.sh
export JAVA_HOME=/usr/java/jdk1.6.0_31
配置core-site.xml文件
mkdir /usr/Hadoop/tmp 创建文件夹tmp,用来保存hadoop临时数据
vim /usr/Hadoop/bin/conf/core-site.xml
<configuration>
<property>
<name>hadoop.tmp.dir</name>
<value>/usr/hadoop/tmp</value>
(备注:请先在 /usr/hadoop 目录下建立 tmp 文件夹,默认采用系统的临时目录:/tmp/Hadoop-hadoop。而这个目录每次重启都会被干掉,必须重新执行format才行,否则会出错。)
<description>A base for other temporary directories.</description>
</property>
<!--file system properties ,配置NameNode的访问地址-->
<property>
<name>fs.default.name</name>
<value>hdfs://192.168.1.2:9000</value>
</property>
</configuration>
配置hdfs-site.xml ,默认备份方式是3
<configuration>
<property>
<name>dfs.replication</name>
<value>1</value>
(备注:replication 是数据副本数量,默认为3,salve少于3台就会报错)
</property>
<configuration>
配置mapred-site.xml
修改hadoop中mapreduce的配置文件,配置的jobTracker的地址和端口
<configuration>
<property>
<name>mapred.job.tracker</name>
<value>http://192.168.1.2:9001</value>
</property>
</configuration>
配置mster
修改/usr/Hadoop/conf/masters文件,指定master机器的主机名
vim /usr/Hadoop/conf/masters
192.168.1.2(或者是master)
配置slave
vim /usr/Hadoop/conf/slaves
slave1
slave2
注意:单机启动的时候,conf/slaves中一定不能为空。没有其他机器,就指定自己。
集群环境下,slave机器上可以不配置slaves
在集群中的其他机器上重复此配置
建议普通用户在hadoop下通过scp复制到其他机器对应的目录下,其中第6步是master机器特有的
使用shell脚本:
for i in $(seq1 100);
do echo slave$i;
scp /usr/hadoop [email protected]$i:/usr;
scp /etc/profile [email protected]$i:/etc;
done
复制文件后可能会发现hadoop目录是root权限
chown -R hadoop:Hadoop Hadoop 授权给hadoop用户
Hadoop启动相关命令:
Hadoop namenode -format 在master机器上格式化namenode
只需要执行一次,如果要重新执行,一定要先删除配置文件core-site.xml中配置
的hadoop.tmp.dir对应路径下的文件
service iptables stop 关闭集群中所有机器防火墙
for i in (seq 1 100);
Do ssh node $i "hostname;
service iptables stop;
chkconfig iptables off;
service iptables status";
done
start-all.sh 启动hadoop的所有服务,包含(hdfs和mapreduce的相关服务)
可以通过以下启动日志看出,首先启动namenode,接着启动datanode1,datanode2,......,然后启动secondarynamenode。再启动jobtracker,然后启动tasktracker1,tasktracker2,.........。
启动hadoop成功后,在master中的tmp文件夹中生成dfs文件夹,在slave中的tmp文件夹中均生成了dfs文件加和mapred文件夹
jps 查看进程
在master上的结果是
jobTracker
NameNode
jps
SecondaryNameNode
在slave上的结果是
TaskTracker
DataNode
jps
Hadoop dfsadmin -report 查看hadoop集群的状态
Hadoop dfsadmin -safemode leave 关闭hdfs的安全模式
http:192.168.1.2:50030 访问mapreduce对应网页
http:192.168.1.2:50070 访问hdfs的对应网页
服务器一直启动不了的终极解决办法:
删除集群中所有机器上的/usr/Hadoop/tmp文件
删除集群中所有机器上的pid文件。默认保存在/tmp目录下。授权给hadoop用户
重新执行stop-all.sh,把能关的服务先关掉
执行ps -ef|grep java|grep hadoop命令,查询是否还有hadoop相关进程在运行,如有则kill -9 进程号 命令杀掉
重新格式话珠玑master
执行start-all.sh启动hadoop
发现没有报错,执行Hadoop dfsadmin -report 命令查看hadoop运行状态,发现只启动了一个节点。可能还是存在安全模式
执行hadoop dfsadmin -safemode leave 关闭主机上的安全模式
再一次执行hadoop dfsadmin -report
解决“no datanode to stop ”问题
原因:
每次namenode format 会重新创建一个namenodeId,而/tmp/dfs/data下包含了上次 format下的id,namenode format 清空了namenode下的数据,但是没有清空datanode下的数据,到时启动是失败,所有每次format前,清空tmp下的所有目录
第一种方法:
删除master上的tmp文件夹 rm -fr /usr/Hadoop/tmp
以上是关于Hadoop常用命令的主要内容,如果未能解决你的问题,请参考以下文章