普开数据大数据课程培训讲解:hadoop安装步骤。本次环境一共三台服务器,JAVA使用的版本是jdk1.6.0_45,zookeeper-3.4.5,hadoop-2.0.0,hive-0.10.0,hbase-0.94.6 主机名 vmtmstorm01 monitor04 monitor01 IP地址 192.168.59.178 192.168.59.173 192.168.59.170 用途 namenode、jobtracker datanode、tasktracker datanode、tasktracker 对于hadoop来说,在hdfs看来节点分为namenode、datanode。namenode只有一个,datanode可以是很多;在mapreduce看来节点分为jobtracker、tasktracker,jobtracker只有一个,tasktracker有多个。我这里是将namenode和jobtracker部署在同一节点上,datanode和tasktracker部署在其它节点上, 1.
安装jdk,上传到/root目录下,执行
chmod a+x jdk-6u14-linux-x64.bin
./jdk-6u14-linux-x64.bin
将安装目录移动到/app目录下
mkdir /app
mv jdk1.6.0_45 /app
建立链接:
mkdir -p /app/java/; (-p确保目录名称存在,如果目录不存在的就新创建一个) ln -sf /app/jdk1.6.0_45 /app/java/latest/
(-f:链结时先将与 dist 同档名的档案删除 -s:进行软链结(symbolic link))
配置JAVA的环境变量
vi /etc/profile
添加如下内容:
export JAVA_HOME=/app/jdk1.6.0_45 export PATH=$JAVA_HOME/bin:$PATH 让添加的环境变量生效执行如下命令: source /etc/profile; java –version
2.
配置网络
以root账户登录每台服务器,并执行如下操作:
vi /etc/hosts
添加如下内容:
192.168.59.178 vmtmstorm01 192.168.59.173 monitor04 192.168.59.170 monitor01
注:在所有服务器的/etc/hosts文件中添加如上内容; 同时,修改windows下该文件,使得个人的笔记本也能识别主机名 加如上内容。
c:\\windows\\system32\\drivers\\etc\\hosts 中添
3.
配置SSH互信
SSH互信:在目标机器上,预先设置好经过认证的key文件,当需要访问目标机器时,目标机器通过key文件,对访问者进行自动认证,从而实现互信。
在任意一台服务器上,以bdp账号登陆(密码123)
执行如下命令,生成bdp账号的密钥对 (这里是主机执行)
/usr/bin/ssh-keygen -t rsa cd ~/.ssh/
cp id_rsa.pub authorized_keys chmod 600 authorized_keys
将~/.ssh目录拷贝覆盖到集群其他节点的bdp用户目录下
scp -r .ssh/ 192.168.59.173:~/ scp -r .ssh/ 192.168.59.170:~/
注意,要确保/etc/ssh/sshd_config 的RSAAuthentication和PubkeyAuthentication为yes,(打开认证方式)改好后重启ssh服务 /sbin/service sshd restart 执行 ssh `hostname` 测试是否配置成功 4.
操作系统参数优化 (每台机器,且以root操作)
4.1防火墙配置:关闭selinux / iptables (每台机器,root权限)
? 关闭iptables
– 停止服务:service iptables stop
– 关闭服务自动启动:chkconfig --del iptables
? 关闭selinux
– 修改/etc/selinux/config里 SELINUX=disabled
4.2 关闭swapiness,减少swap使用倾向 (每台机器,root权限)
? ? ? ?
当系统有swap时会很慢,所以让系统最大限度的使用物理内存(默认vm.swappiness = 60) 修改/etc/sysctl.conf,增加一行 vm.swappiness = 0
echo \
动态生效 sysctl -w vm.swappiness=0 ( -w 临时改变某个指定参数的值) 查看是否生效 cat /proc/sys/vm/swappiness
(/proc 可以在该目录下获取系统信息,这些信息是在内存中由系统自己产生的)
注:sysctl.conf是一个用于在系统运作中查看及调整系统参数的工具
4.3 最大打开文件数和最大进程数limits.conf (每台机器,root权限) ? ? ? ? ? ?
Linux默认是1024,对于分布式文件系统太小,Hadoop有可能会报错误 执行 ulimit -a,查看open files项和max user processes项 执行下面脚本,修改这两项值
echo \
echo \sysctl –p
?
重启服务器,执行 ulimit -a 查看是否修改成功
?在/etc/security/limits.conf中重复出现了多个YOUR_USER_NAME - nproc 1000000
4.4 屏蔽文件访问时间,优化/etc/fstab参数 (每台机器,root权限)(注:未配置) ? ?
HDFS存储着海量文件,如果屏蔽底层Linux的文件访问时间,会提高HDFS的IO 修改/etc/fstab,添加如下noatime,nodiration,例如 LABEL=/data1 /data1 ext4 defaults,noatime,nodiratime 1 2 LABEL=/data2 /data2 ext4 defaults,noatime,nodiratime 1 2 LABEL=/data3 /data3 ext4 defaults,noatime,nodiratime 1 2 ? ?
4.5 配置ntp时间同步 (每台机器,root权限) ? ?
在Hadoop集群中,要求服务器之间的时间同步
选一台服务器作为NTP server, 修改 /etc/ntp.conf 如下,
restrict default nomodify server 192.168.59.178
fudge 192.168.59.178 stratum 8 并重启 service ntpd restart ? ? ?
在集群其他节点上,首先关闭NTP service ntpd stop
执行 /usr/sbin/ntpdate NTPSERVER_IP 进行同步,执行 date 查看是否正确
再cron里加入同步命令:执行 crontab –e (-e:执行文字编辑器来设定时程表,内定的文字编辑器是 VI,),添加如下内容,使其每小时同步一次 重新mount或重启机器使之生效
注:由于我们使用的是虚拟机,可以不配置该参数
00 */1 * * * root /usr/sbin/ntpdate NTPSERVER_IP;/sbin/hwclock -w
测试情况:/etc/ntp.conf文件下 192.168.59.178:
restrict default nomodify server 192.168.59.178
fudge 192.168.59.178 stratum 8
192.168.59.173:
server 192.168.59.178
fudge 192.168.59.178 stratum 10
192.168.59.173:无修改 结果:三台机器时间已同步 补充:
crontab [ -u user ] filecrontab [ -u user ] { -l | -r | -e } 说明:
crontab 是用来让使用者在固定时间或固定间隔执行程式之用,换句话说,也就是类似使用者的时程表。-u user 是指设定指定 user 的时程表,这个前提是你必须要有其权限(比如说是 root)才能够指定他人的时程表。如果不使用 -u user 的话,就是表示设定自己的时程表。 参数:
-e:执行文字编辑器来设定时程表,内定的文字编辑器是 VI,如果你想用别的文字编辑器,则请先设定 VISUAL 环境变数来指定使用那个文字编辑器(比如说 setenv VISUAL joe) -r:删除目前的时程表 -l:列出目前的时程表
时程表的格式如下: f1 f2 f3 f4 f5 program
其中 f1 是表示分钟,f2 表示小时,f3 表示一个月份中的第几日,f4 表示月份,f5 表示一个星期中的第几天。program 表示要执行的程式。
当 f1 为 * 时表示每分钟都要执行 program,f2 为 * 时表示每小时都要执行程式,其余类推
当 f1 为 a-b 时表示从第 a 分钟到第 b 分钟这段时间内要执行,f2 为 a-b 时表示从第 a 到第 b 小时都要执行,其余类推
当 f1 为 */n 时表示每 n 分钟个时间间隔执行一次,f2 为 */n 表示每 n 小时个时间间隔执行一次,其余类推 5.
Zookeeper安装
在${ZOOKEEPER_HOME}/conf/zoo.cfg ( /app/zookeeper-3.4.5-cdh4.3.0/conf/zoo.cfg)中做如下定义 tickTime=5000
dataDir=/app/zookeeper-3.4.5-cdh4.3.0/data (/tmp/zookeeper /tmp用来存放不同程序执行时产生的临时文件) clientPort=2181 配置参数
a) b) c)
tickTime: 每个tick的时间长度(毫秒),是zk中最小时间单元。 dataDir:内存快照(snapshot)和transaction log的存储目录 clientPort :用于服务client连接的端口号
5.1 ZK配置:单节点配置
5.2 ZK配置:多节点配置(为3个节点的集群)
在${ZOOKEEPER_HOME}/conf/zoo.cfg ( /app/zookeeper-3.4.5-cdh4.3.0/conf/zoo.cfg)中做如下定义
tickTime=5000
dataDir=/app/zookeeper-3.4.5-cdh4.3.0/data clientPort=2181 initLimit=10 syncLimit=5
server.1=192.168.59.178:4888:5888 server.2=192.168.59.173:4888:5888 server.3=192.168.59.170:4888:5888 ?
配置参数
– – –
initLimit: 刚选举出leader后,followers 与leader 连接和同步(connect/sync)的时间周期: initLimit*tickTime。
syncLimit:正常工作状态下,允许followers与leader同步(sync)的时间,当follower与leader相差太大的话,该follower将被排除出集群。
server.x=[hostname]:nnnnn[:nnnnn]第一个端口用于follower与leader连接,第二个端口用于leader election。
同时在dataDir目录下创建一个名为myid的文件,里面写入1或者2或者3,该值与zoo.cfg中的“server.#=…”的#一致
需要在每个zookeeper上均执行 bin/zkServer.sh start,该集群才可以正常工作
相关推荐: