命令汇总
网络配置:
hostname 查看主机名
vi /etc/sysconfig/network 设置主机名
ifconfig 查看ip情况
vi /etc/sysconfig/network-scripts/ifcfg-eth0 设置网络
DEVICE=“eth0” 接口名(设备,网卡)
BOOTPROTO=STATIC IP的配置方法(static:固定IP,dhcpHCP,none:手动)
ONBOOT=yes 系统启动的时候网络接口是否有效(yes/no)
IPADDR=192.168.1.2 IP网址
GETEWAY=192.168.1.0 网关
DNS1=202.113.112.55 DNS服务器
service network restart 重启网卡服务
service network start 开始网卡服务
service network stop 停止网卡服务
ifconfig eth0 up|down 关闭和启用指定的网卡
ifconfig 查看配置的ip信息是否生效
vi /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 rshnc是一个远程数据同步工具
service sshd restart 启动sshd服务
ssh-keygen -t rsa -P ‘’ 生成无密码密钥对(存放路径是
/home/Hadoop/.ssh)
cat ~/.ssh/id_rsa.pub >>~/.ssh/authorized_keys 将id_rsa.pub追加
到授权的Key中
chmod 600 ~/.ssh/authorized_keys 授予读写的权限
vi /etc/ssh/sshd_config 修改sshd服务的配置文件
RSAAuthentication yes # 启用 RSA 认证
PubkeyAuthentication yes # 启用公钥私钥配对认证方式
安装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
exportJAVA_HOME=/usr/java/jdk1.6.0_31/
exportCLASSPATH=.:
C
L
A
S
S
P
A
T
H
:
CLASSPATH:
CLASSPATH:JAVA_HOME/lib:
J
R
E
H
O
M
E
/
l
i
b
e
x
p
o
r
t
P
A
T
H
=
JRE_HOME/lib exportPATH=
JREHOME/libexportPATH=PATH:
J
A
V
A
H
O
M
E
/
b
i
n
:
JAVA_HOME/bin:
JAVAHOME/bin:JRE_HOME/bin
source /etc/profile 使profile的配置文件生效
java –version 验证jdk是否安装成功
安装剩余机器:
scp /usr/java/jdk1.6.0_31/ Hadoop@master: /usr/java/
使用shell脚本安装:
for i in
(
s
e
q
1100
)
;
d
o
e
c
h
o
s
l
a
v
e
(seq 1 100); do echo slave
(seq1100);doechoslavei;
scp /usr/java/jdk1.6.0_31/ Hadoop@slave$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 hadoop 文件夹重命名
chown -R Hadoop:Hadoop Hadoop hadoo文件的属主重新分配,-R是递归,hadoop文件夹分配给hadoop组下的hadoop用户
rm –rf Hadoop-1.0.0.tar.gz 删除安装文件(-r是递归,-f是强制)
配置hadoop的环境变量
vi /etc/profile
export HADOOP_HOME=/usr/Hadoop
export PATH=
P
A
T
H
:
PATH:
PATH:HADOOP_HOME/bin
sourcr /etc/profile 使配置生效
配置hadoop
1.配置hadoop-env.sh
文件位于“/usr/Hadoop/conf”
vi /usr/Hadoop/conf/Hadoop-env.sh
export JAVA_HOME=/usr/java/jdk1.6.0_31
2.配置core-site.xml文件
mkdir /usr/Hadoop/tmp 创建文件夹tmp,用来保存hadoop临时数据
vi /usr/Hadoop/conf/core-site.xml
hadoop.tmp.dir
/usr/hadoop/tmp
(备注:请先在 /usr/hadoop 目录下建立 tmp 文件夹,默认采用系统的临时目录:/tmp/Hadoop-hadoop。而这个目录每次重启都会被干掉,必须重新执行format才行,否则会出错。)
A base for other temporary directories.
3.配置hdfs-site.xml文件
修改hadoop中的hdfs的配置,配置的备份方式默认是3
dfs.replication
1
(备注:replication 是数据副本数量,默认为3,salve少于3台就会报错)
4.配置mapred-site.xml文件
修改hadoop中mapreduce的配置文件,配置的jobTracker的地址和端口
mapred.job.tracker
http://192.168.1.2:9001
5.配置masters文件
修改/usr/Hadoop/conf/masters文件,指定master机器的主机名
vi /usr/Hadoop/conf/masters
192.168.1.2(或者是master)
6.配置slaves文件
vi /usr/Hadoop/conf/slaves
slave1
slave2
注意:单机启动的时候,conf/slaves中一定不能为空。没有其他机器,就指定自己。
集群环境下,slave机器上可以不配置slaves
7.在集群中的其他机器上重复此配置
建议在普通用户hadoop下通过scp复制到其他机器的对应目录下。
其中第6步是master机器上特有的
使用shell脚本:
for i in
(
s
e
q
1100
)
;
d
o
e
c
h
o
s
l
a
v
e
(seq1 100); do echo slave
(seq1100);doechoslavei;
scp /usr/hadoop Hadoop@slave
i
:
/
u
s
r
;
s
c
p
/
e
t
c
/
p
r
o
f
i
l
e
H
a
d
o
o
p
@
s
l
a
v
e
i: /usr; scp /etc/profile Hadoop@slave
i:/usr;scp/etc/profileHadoop@slavei:/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 iin (seq 1 100 );
Do ssh node$i “hostname;
service iptable 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的对应网页
服务一直启动不了的终极解决办法:
1.删除集群中所有机器上的/usr/Hadoop/tmp文件
2.删除集群中所有机器上的pid文件。默认存放在/tmp目录下。这里我重新设置到了/bigdata/hadoop/pids,记得要授权给hadoop用户
3.重新执行stop-all.sh,把能关的服务先都关掉。
4.执行ps -ef | grep java| grep hadoop命令,查询是否还有hadoop相关进程才运行,如果有,执行kill -9 进程号 命令杀掉
5.重新格式化主机master
Hadoopnamenode -format
6.执行start-all.sh启动hadoop
7.发现没有报错,执行 Hadoopdfsadmin –report 命令查看hadoop运行状态
出现如图所示:
发现只启动了一个节点。可能是还存在安全模式。
8.执行hadoop dfsadmin –safemodeleave,关闭主机上的安全模式
9.再次执行hadoop dfsadmin –report
解决“no datanode to stop”问题?
原因:
每次namenode format会重新创建一个namenodeId,而tmp/dfs/data下包含了上次format下的id,namenode format清空了namenode下的数据,但是没有清空datanode下的数据,导致启动时失败,所要做的就是每次fotmat前,清空tmp一下的所有目录。
第一种方法:
删除master上的tmp文件夹
rm -rf /usr/Hadoop/tmp
创建/usr/Hadoop/tmp文件夹
mkdir /usr/Hadoop/tmp
删除“/tmp”一下的“hadoop”开头文件
rm -rf /tmp/Hadoop*
重新格式化hadoop的master
Hadoop namenode -format
启动hadoop
start-all.sh
使用第一种方案,有种不好处就是原来集群上的重要数据全没有了。假如说Hadoop集群已经运行了一段时间。建议采用第二种。
第二种方法:(推荐)
1)修改每个Slave的namespaceID使其与Master的namespaceID一致。
或者
2)修改Master的namespaceID使其与Slave的namespaceID一致。
该"namespaceID"位于"/usr/hadoop/tmp/dfs/data/current/VERSION"文件中,前面蓝色的可能根据实际情况变化,但后面红色是不变的。
建议采用第二种,这样方便快捷,而且还能防止误删。
解决Exceeded MAX_FAILED_UNIQUE_FETCHES问题
出现错误如下:
Shuffle Error: ExceededMAX_FAILED_UNIQUE_FETCHES; bailing-out
程序里面需要打开多个文件,进行分析,系统一般默认数量是1024,(用ulimit -a可以看到)对于正常使用是够了,但是对于程序来讲,就太少了。
执行ulimit -a 查看文件限制数量
vim /etc/security/limits.conf
添加:
soft nofile 102400
soft nofile 409600
vim /etc/pam.d/login
添加:
session required /lib/security/pam_limits.so