您的位置:首页 > 运维架构

三台阿里云服务器搭建完全分布式hadoop

2018-01-04 15:27 579 查看
1.准备工作:jdk安装(个人选择的1.8版本) 

2.ssh免密登陆: 

关闭放火墙(可以将要开放的端口加入防火墙的开发端口中,学习用就直接关闭防火墙了): 

1)关闭firewall: 

systemctl stop firewalld.service #停止firewall 

systemctl disable firewalld.service #禁止firewall开机启动 

firewall-cmd

2) 重启后生效 

开启: chkconfig iptables on 

关闭: chkconfig iptables off 

即时生效,重启后失效 

开启: service iptables start 

关闭: service iptables stop 

需要说明的是对于Linux下的其它服务都可以用以上命令执行开启和关闭操作。 

在开启了防火墙时,做如下设置,开启相关端口, 

修改/etc/sysconfig/iptables 文件,添加以下内容: 

-A RH-Firewall-1-INPUT -m state –state NEW -m tcp -p tcp –dport 80 -j ACCEPT 

-A RH-Firewall-1-INPUT -m state –state NEW -m tcp -p tcp –dport 22 -j ACCEPT

3)vi /etc/hosts 

ip1 master 

ip2 slave1 

ip3 slave2 

此处特别注意下,我自己由于这个地方出问题导致Hadoop集群延迟启动3,4天,那种感觉实在是难受。。。 

问题是:如果是在master上操作的话ip1 必须是master 的内网ip 同理slaves上也是一样,自己的主机上的IP要改成内网IP,其他的要用外网IP。 

补充网络知识:服务器公网ip 

  可以用于域名解析ip,服务器远程登录ip,是最主要的服务器ip地址。 

   内网ip 

  不能用于域名解析。 

  不可以直接用于服务器远程登录,其主要作用是:跟当前帐号下的其他同集群的机器通信。 

  一些小型企业或者学校,通常都是申请一个固定的IP地址,然后通过IP共享(IP Sharing),使用整个公司或学校的机器都能够访问互联网。而这些企业或学校的机器使用的IP地址就是内网IP,内网IP是在规划IPv4协议时,考虑到IP地址资源可能不足,就专门为内部网设计私有IP地址(或称之为保留地址),一般常用内网IP地址都是这种形式的:10.X.X.X、

172.16.X.X-172.31.X.X、192.168.X.X等。需要注意的是,内网的计算机可向Internet上的其他计算机发送连接请求,但Internet上其他的计算机无法向内网的计算机发送连接请求。 

  公网IP就是除了保留IP地址以外的IP地址,可以与Internet上的其他计算机随意互相访问。我们通常所说的IP地址,其实就是指的公网 IP。互联网上的每台计算机都有一个独立的IP地址,该IP地址唯一确定互联网上的一台计算机。这里的IP地址就是指的公网IP地址。 

  其实,互联网上的计算机是通过“公网IP+内网IP”来唯一确定的,就像很多大楼都是201房间一样,房间号可能一样,但是大楼肯定是唯一的。公网 

IP地址和内网IP地址也是同样,不同企业或学校的机器可能有相同的内网IP地址,但是他们的公网IP地址肯定不同。那么这些企业或学校的计算机是怎样 

IP地址共享的呢?这就需要使用NAT(Network Address Translation,网络地址转换)功能。当内部计算机要连接互联网时,首先需要通过NAT技术,将内部计算机数据包中有关IP地址的设置都设成 

NAT主机的公共IP地址,然后再传送到Internet,虽然内部计算机使用的是私有IP地址,但在连接Internet时,就可以通过NAT主机的 

NAT技术,将内网我IP地址修改为公网IP地址,如此一来,内网计算机就可以向Internet请求数据了。——百度百科 

此处master的IP对于slaves是公网IP,但是对于master自己应该用内网IP—正真的对应自己的机器的ifconfig。 

以上在master,salve1和slave2上都要执行,为了方便,jdk的安装目录最好一样,之后的目录操作也是。

4)在所有的主机上创建Hadoop用户: 

adduser hadoop–用户名 

passwd 123456–密码 

新创建的用户并不能使用sudo命令,需要给他添加授权。 

sudo命令的授权管理是在sudoers文件里的。可以看看sudoers: 

[root@localhost ~]# whereis sudoers 

sudoers: /etc/sudoers /etc/sudoers.d /usr/libexec/sudoers.so /usr/share/man/man5/sudoers.5.gz 

找到这个文件位置之后再查看权限: 

[root@localhost ~]# ls -l /etc/sudoers 

-r–r—– 1 root root 4251 9月 25 15:08 /etc/sudoers 

是的,只有只读的权限,如果想要修改的话,需要先添加w权限: 

[root@localhost ~]# chmod -v u+w /etc/sudoers 

mode of “/etc/sudoers” changed from 0440 (r–r—–) to 0640 (rw-r—–) 

然后就可以添加内容了,在下面的一行下追加新增的用户: 

[root@localhost ~]# vim /etc/sudoers


Allow root to run any commands anywher

root ALL=(ALL) ALL 

hadoop ALL=(ALL) ALL #这个是新增的用户 

wq保存退出,这时候要记得将写权限收回: 

[root@localhost ~]# chmod -v u-w /etc/sudoers 

mode of “/etc/sudoers” changed from 0640 (rw-r—–) to 0440 (r–r—–) 

这时候使用新用户登录,使用sudo: 

[root@localhost ~]# su hadoop 

输入密码 

[hadoop@localhost ~]$ sudo cat /etc/passwd 

[sudo] password for hadoop:

We trust you have received the usual lecture from the local System 

Administrator. It usually boils down to these three things:
#1) Respect the privacy of others.
#2) Think before you type.
#3) With great power comes great responsibility.


第一次使用会提示你,你已经化身超人,身负责任。而且需要输入密码才可以下一步。如果不想需要输入密码怎么办,将最后一个ALL修改成NOPASSWD: ALL。

5)安装ssh,由于云服务器都有自带,不在赘述。

接下来有关Hadoop集群的操作,务必在Hadoop用户下进行操作。 

ssh master ssh-keygen –t rsa 

此时在master节点主机的~/.ssh目录生成密钥对id_rsa和di_rsa.pub,可以通过ls命令列表查看。 

ssh slave1 ssh-keygen -t rsa 

ssh slave2 ssh-keygen -t rsa

将刚刚生成的密钥对中的公钥复制到master节点的~/.ssh/目录之下 

scp hadoop@slave1:~/.ssh/id_rsa.pub ~/.ssh/slave1.pub 

scp hadoop@slave2:~/.ssh/id_rsa.pub ~/.ssh/slave2.pub

将master、slave1、slave2主机的公钥写入master主机~/.ssh目录的认证文件authorized_keys中 

cat ~/.ssh/*.pub > ~/.ssh/authorized_keys 

用chmod命令修改认证文件authorized_keys的属性为600 

chomd 600 ~/.ssh/authorized_keys

将~/.ssh/authorized_keys认证文件复制到所有节点主机的~/.ssh/目录中,并进行免密码连接测试。

ssh slave1 

exit; 

ssh slave2 

exit;

mkdir /home/hadoop/chadoop 

cd /home/hadoop/chadoop 

mkdir hadoop 

cd hadoop 

如果有下载好的安装包可以直接利用ssh工具将那个安装包传到这个文件夹下,我的是Hadoop2.5.0 

tar -zxvf xxxx.gz 

cd xxxx 

进入Hadoop的根目录 

mkdir tmp 

mkdir dfs 

cd dfs 

mkdir data 

mkdir name

vi ~/.bash_profile 

(此处附上我的配置文件,请根据自己的需求更改,另外每次想要快捷的使用命令之前都需要source ~/.bash_profile,否则需要去相应的目录下操作)
export JAVA_HOME=/usr/local/jdk/jdk1.8.0_131
export CLASSPATH=$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export HADOOP_HOME=/home/hadoop/chadoop/hadoop/hadoop-2.5.0
export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop
export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native
export HADOOP_OPTS="-Djava.library.path=$HADOOP_HOME/lib"
export ZOOKEEPER_HOME=/home/hadoop/chadoop/zookeeper/zookeeper-3.4.6
export HBASE_HOME=/home/hadoop/chadoop/hbase/hbase-1.1.2
export HIVE_HOME=/home/hadoop/chadoop/hive/apache-hive-0.13.0-bin
export CLASSPATH=$CLASSPATH:$HIVE_HOME/lib
export PATH=$PATH:$HIVE_HOME/bin:$HIVE_HOME/conf
export PIG_HOME=/home/hadoop/chadoop/pig/pig-0.16.0
export PATH=$PATH:$PIG_HOME/bin
export PIG_CLASSPATH=$HADOOP_HOME/etc/hadoop
export HIVE_CLASSPATH=$HADOOP_HOME/etc/hadoop
export SQOOP_HOME=/home/hadoop/chadoop/sqoop/sqoop-1.4.6.bin__hadoop-2.0.4-alpha
export PATH=$PATH:$SQOOP_HOME/bin
export SPARK_HOME=/home/hadoop/chadoop/spark/spark-2.1.1-bin-hadoop2.6/
export PATH=$PATH:$SPARK_HOME/bin
export OOZIE_HOME=/home/hadoop/chadoop/oozie/oozie-4.3.0
export MAVEN_HOME=/home/hadoop/chadoop/maven/apache-maven-3.5.0
export PATH=$PATH:$MAVEN_HOME/bin
export OOZIE_HOME=/home/hadoop/chadoop/local/oozie/oozie-4.3.0
export MAVEN_HOME=/home/hadoop/chadoop/maven/apache-maven-3.5.0
export PATH=$PATH:$MAVEN_HOME/bin
export OOZIE_URL=http://47.93.10.102:11000/oozie
export CATALINA_HOME=/home/hadoop/chadoop/local/oozie/oozie-4.3.0/oozie-server
export PATH=${CATALINA_HOME}/bin:${OOZIE_HOME}/bin:$PATH
export OOZIE_CONFIG=/home/hadoop/chadoop/local/oozie/oozie-4.3.0/conf

export
PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$ZOOKEEPER_HOME/bin:$HBASE_H
OME/bin:$OOZIE_HOME/bin:$PATH
export HADOOP_HOME_WARN_SUPPRESS=not_null
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34

hadoop-2.8.0/etc/hadoop目录下的文件(core-site.xml,hdfs-site.xml, mapred-site.xml, yarn-site.xml,hadoop-env.sh, mapred-env.sh,yarn-env.sh 和slaves)
core-site.xml
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://master:8020</value>
</property>
<property>
<name>io.file.buffer.size</name>
<value>131072</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>file:/home/hadoop/chadoop/hadoop/hadoop-2.5.0/tmp</value>
<description>Abasefor other temporary directories.</description>
</property>
<property>
<name>hadoop.proxyuser.hadoop.hosts</name>
<value>master</value>
</property>
<property>
<name>hadoop.proxyuser.hadoop.groups</name>
<value>*</value>
</property>
<!-- 指定zookeeper地址 -->
<property>
<name>ha.zookeeper.quorum</name>
<value>master:2181,slave1:2181,slave2:2181</value>
</property>
</configuration>

hdfs-site.xml

<configuration>

<property>
<name>dfs.namenode.secondary.http-address</name>
<value>master:9001</value>
<description>备份namenode的http地址</description>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>file:/home/hadoop/chadoop/hadoop/hadoop-2.5.0/dfs/name</value>
<description>namenode的目录位置</description>
</property>

<property>
<name>dfs.datanode.data.dir</name>
<value>file:/home/hadoop/chadoop/hadoop/hadoop-2.5.0/dfs/data</value>
<description>datanode's address</description>
</property>

<property>
<name>dfs.replication</name>
<value>3</value>
<description>hdfs系统的副本数量</description>
</property>
<property>
<name>dfs.permissions</name>
<value>false</value>
</property>
<property>
<name>dfs.webhdfs.enabled</name>
<value>true</value>
</property>
<property>
<name>dfs.datanode.max.xcievers</name>
<value>4096</value>
</property>
</configuration>

mapred-site.xml(有一个是模板cp 一个新的出来)

<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
<description>指明mapreduce的调度框架为yarn</description>
</property>
<property>
<name>mapreduce.jobhistory.address</name>
<value>master:10020</value>
<description>指明mapreduce的作业历史地址</description>
</property>
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>master:19888</value>
<description>指明mapreduce的作业历史web地址</description>
</property>
</configuration>

yarn-site.xml
<configuration>

<!-- Site specific YARN configuration properties -->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.resourcemanager.hostname</name>
<value>master</value>
</property>
<property>
<name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name>
<value>org.apache.hadoop.mapred.ShuffleHandler</value>
</property>
<property>
<name>yarn.resourcemanager.address</name>
<value>master:50066</value>
</property>
<property>
<name>yarn.resourcemanager.scheduler.address</name>
<value>master:50067</value>
</property>
<property>
<name>yarn.resourcemanager.resource-tracker.address</name>
<value>master:50068</value>
</property>
<property>
<name>yarn.resourcemanager.admin.address</name>
<value>master:50069</value>
</property>
<property>
<name>yarn.resourcemanager.webapp.address</name>
<value>master:8088</value>
</property>
<property>
<name>yarn.resourcemanager.zk-address</name>
<value>master:2181,slave1:2181,slave2:2181</value>
</property>
</configuration>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132

hadoop-env.sh,mapred-env.sh,yarn-env.sh 

加入jdk目录:export JAVA_HOME=/usr/local/jdk/jdk1.8.0_131 

vi slaves

master 

slave1 

slave2

scp ~/.bash_profilehadoop@slave1:~/ 

scp ~/.bash_profilehadoop@slave2:~/

ssh hadoop@slave1 . ~/.bash_profile 

ssh hadoop@slave2 . ~/.bash_profile

scp -r chadoop/hadoop@slave1:~ 

scp -r chadoop/hadoop@slave2:~ 

(还是建议直接用ssh工具再做一次工作,实在是慢~)

在master节点主机上格式化hdfs文件系统 

hdfs namenode -format

start-all.sh 

jps 

2646 NodeManager 

24038 Jps 

2380 SecondaryNameNode 

2524 ResourceManager 

11373 RunJar 

13726 NameNode 

2223 DataNode 

(master节点有4个ResourceManager, Jps, NameNode, SecondaryNamenode,slave1与slave2有3个NodeManager, DataNode, Jps)

在hdfs文件系统里面操作。首先,用-mkdir命令在hdfs中创建一个mydir目录,然后用-put命令上载文件,步骤如下: 

hdfs dfs -mkdir /mydir 

hdfs dfs -put ** (文件) /mydir 

hdfs dfs -ls /mydir 

hadoop jar~/chadoop/hadoop/hadoop-2.5.0/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.5.0.jarwordcount /mydir/* /mydir/output 

每个mr程序需要不同的输出目录,相同已存在需要重新命名或删除。 

netstat -antpl|grep xxxx 

查看端口号是否监听 

结果查看(hdfs dfs -cat/mydir/output/part-r-00000) 

可以在浏览器中用master的外网IP:8088或50070查看刚刚的一些操作,也可以看看datanode的状态。

作者博客地址:http://blog.csdn.net/gakki_smile/article/details/77198146
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: