hadoop入门之集群搭建(一)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/luoluo01/article/details/89707690

标签(空格分隔): hadoop

hadoop集群搭建

1 centos准备

####静态网络配置
我是centos7的 配置下对应的静态网路地址
vi /etc/sysconfig/network-scripts/ifcfg-ens33

TYPE=Ethernet
BOOTPROTO=static #静态网路
DEFROUTE=yes
PEERDNS=yes
PEERROUTES=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_PEERDNS=yes
IPV6_PEERROUTES=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=ens33
DEVICE=ens33
ONBOOT=yes  # 开机启动
IPADDR=192.168.52.131 #地址
DNS=8.8.8.8         #dns
GATEWAY=192.168.52.2    # 网关
NETMASK=255.255.255.0

记得删除UUID
然后service network restart 重启网络

如果无法ping通百度啥的域名如下配置改下

vi /etc/resolv.conf
添加

nameserver 8.8.8.8

解析服务与dns一致即可

2安装jdk

1)去官网下个jdk对应的版本,之后上传解压
2)将java添加到环境变量中

vim /etc/profile
	#在文件最后添加
	export JAVA_HOME=/home/hadoop/app/jdk-7u_65-i585
	export PATH=$PATH:$JAVA_HOME/bin
	#刷新配置
	source /etc/profile

3)配置下对应的host

vi /etc/hosts
192.168.52.131 hadoop1
192.168.52.132 hadoop2
192.168.52.133 hadoop3
192.168.52.134 hadoop4

4)文件拷贝辅助shell
scp_file.sh

 source $basepath/userconfig
scp_file() {
    local s=? l=? d=?
    while getopts "s:d:l:" opt; do
        case $opt in
            s )
                s=$OPTARG
                ;;
            l )
                l=$OPTARG
                ;;
            d )
                d=$OPTARG
                ;;
            ? )
                echo "选项不存在"
                ;;
        esac
    done        
     copy_every  $l $s $d
}
copy_every(){
 local nodes files;
 nodes=${1//,/ }
 files=${2//,/ }
 for n in $nodes
 do
  for f in $files
  do
        echo $n $f
    expect -c "set timeout -1;
             spawn scp -r $f $ROOT_U@${n}:${3}
             expect {
                    *(yes/no)* {send yes\r;exp_continue;}
                    *assword:* {send $ROOT_P\r;exp_continue;}
                    eof        {exit 0;}
             }";
  done
 done 
}
scp_file $@

userconfig

ROOT_U=root# 用户名
ROOT_P=root#密码

例子:
sh scp_file.sh -l hadoop2,hadoop3,hadoop4,hadoop1 -s jdk-8u121-linux-x64.tar.gz -d /root
其中 -l后面是对应的域名以,号隔开 -s是要拷贝的文件 以,号隔开 -d是对应要拷贝到对应的目录上

sh scp_file.sh -l hadoop2,hadoop3,hadoop4 -s /etc/hosts -d /etc/

扫描二维码关注公众号,回复: 6073688 查看本文章

3用户配置

由于我们需要运行hadoop所以最好建立一个相关的用户去运行该程序
1)新建用户辅助shell
user_add.sh

#! /bin/bash
basepath=$(cd `dirname $0`;pwd)
source ${basepath}/adduserconf
yum install -y tcl tk expect
user_add(){
  echo $1
  useradd $1
  echo "密码 $2"
  expect -c "set timeout -1;
        spawn passwd $1;
        expect {
           *密码* {send $2\r; exp_continue;}
           eof   {exit 0;}
        }";     
  su $1
}

user_add_enter(){
  user_add $USER $PASSWDN

}
user_add_enter

adduserconf

USER=hadoop
PASSWDN=hadoop

这两个文件放到相同目录下
执行 user_add.sh 即可添加hadoop用户
可使用 scp_file.sh将这两个文件拷贝到对应的机器上去执行
执行完毕后用hadoop登陆 再做如下hadoop集群搭建

4 hadoop集群配置

2个集群,5个配置

2个集群

hadoop下载可通过 hadoop历史版本选择一个版本下载
hadoop集群搭建 主要搭建两个集群 在hadoop里面已存在。
hdfs和yarn(存储和调度系统)

5个配置

这里搭建是最简配置,如果需要自定义其他相关配置可通过 hadoop历史版本找到对应的版本选择document完成自定义配置
我在/home/hadoop 下建立一个文件夹 apps 将hadoop对应项目放到里面
配置文件在 hadoop-[version]/etc/hadoop下
core-size.xml hdfs-size.xml yarn-size.xml mapred-site.xml hadoop.env 哦 还有启动的时候需要配置slave 配置datanode 比如hadoop2~4都是datanode则配置

hadoop2
hadoop3
hadoop4

start-dfs.sh里面会读取slave数据。
注意每个集群上,hdfs本身都是单独启动对应的节点的,yarn也一样,我们可以通过配置slave和免密登陆,可让脚本自动启动。另外yarn的resourcemanage是本地启动的。
hadoop的这几个需要配置的文件都在 HADOOP_HOME/etc/hadoop 里面配置

第一个:hadoop-env.sh
		vim hadoop-env.sh
		#第27行
		export JAVA_HOME=${JAVA_HOME}
		
	第二个:core-site.xml

	<!-- 指定HADOOP所使用的文件系统schema(URI),HDFS的老大(NameNode)的地址 -->
	<property>
		<name>fs.defaultFS</name>
		<value>hdfs://hadoop1:9000</value>
	</property>
	<!-- 指定hadoop运行时产生文件的存储目录 -->
	<property>
		<name>hadoop.tmp.dir</name>
		<value>/home/hadoop/hadoop-2.4.1/tmp</value>
</property>
	
第三个:hdfs-site.xml   
	<!-- 指定HDFS副本的数量 -->
	<property>
		<name>dfs.replication</name>
		<value>1</value>
	</property>
	
	<property>
		<name>dfs.secondary.http.address</name>
		<value>hadoop1:50090</value>
	</property>
	
第四个:mapred-site.xml (mv mapred-site.xml.template mapred-site.xml)
	mv mapred-site.xml.template mapred-site.xml
	vim mapred-site.xml
	<!-- 指定mr运行在yarn上 -->
	<property>
		<name>mapreduce.framework.name</name>
		<value>yarn</value>
	</property>
	
第五个:yarn-site.xml
	<!-- 指定YARN的老大(ResourceManager)的地址 -->
	<property>
		<name>yarn.resourcemanager.hostname</name>
		<value>hadoop1</value>
	</property>
	<!-- reducer获取数据的方式 -->
	<property>
		<name>yarn.nodemanager.aux-services</name>
		<value>mapreduce_shuffle</value>
	</property>

修改完毕后使用scp_file.sh 完成hadoop项目的拷贝

   sh scp_file.sh -l hadoop2,hadoop3,hadoop4 -s /home/hadoop/apps -d /home/hadoop/apps

apps下是hadoop-[version]的项目
由于运行hadoop最好单独用hadoop或者单独的用户去运行,所以我们再使用scp_file 的时候将对应的userconf的用户和密码配置成相应的用户,如果先运行 免密配置就木有影响

将HADOOP_HOME添加到环境变量

vim /etc/proflie
	export JAVA_HOME=/usr/java/jdk1.7.0_65
	export HADOOP_HOME=/itcast/hadoop-2.4.1
	export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin

source /etc/profile

5 免密登陆辅助shell

免密配置
copy_id.sh

#!/bin/bash

SERVERS="hadoop1 hadoop2 hadoop3 hadoop4 "
PASSWORD=hadoop

auto_ssh_copy_id() {
    expect -c "set timeout -1;
        spawn ssh-copy-id $1;
        expect {
            *(yes/no)* {send -- yes\r;exp_continue;}
            *assword:* {send -- $2\r;exp_continue;}
            eof        {exit 0;}
        }";
}

ssh_copy_id_to_all() {
    for SERVER in $SERVERS
    do
        auto_ssh_copy_id $SERVER $PASSWORD
    done
}

免密配置:

ssh-keygen -t rsa <生成秘钥>
四个enter即可不需要配置啥密码
调用copy_id.sh完成免密登陆配置
sh copy_id.sh

防火墙设置

由于使用centos7防火墙操作命令如下 做下关闭操作
启动: systemctl start firewalld
关闭: systemctl stop firewalld
查看状态: systemctl status firewalld
开机禁用 : systemctl disable firewalld
开机启用 : systemctl enable firewalld

4 namenode format

hdfs namenode -format (hadoop namenode -format)
格式化namenode

5 启动

start-dfs.sh
start-yarn.sh

猜你喜欢

转载自blog.csdn.net/luoluo01/article/details/89707690