Hadooprabbitmq集群部署署时候的几个问题记录

扫一扫体验手机阅读
Hadoop运维记录系列(十八)
<span type="1" blog_id="1919017" userid='
分享到朋友圈
关注作者,不错过每一篇精彩Hadoop集群部署权限总结
Hadoop集群部署权限总结
这是一篇总结的文章,主要介绍 Hadoop 集群快速部署权限的步骤以及一些注意事项。如果你想了解详细的过程,请参考本博客中其他的文章。
1. 开始之前
hadoop 集群一共有三个节点,每个节点的 ip、hostname、角色如下:
这是一篇总结的文章,主要介绍 Hadoop 集群快速部署权限的步骤以及一些注意事项。如果你想了解详细的过程,请参考本博客中其他的文章。
1. 开始之前
hadoop 集群一共有三个节点,每个节点的 ip、hostname、角色如下:
192.168.56.121 cdh1 NameNode、kerberos-server、ldap-server、sentry-store
192.168.56.122 cdh2 DataNode、yarn、hive、impala
192.168.56.123 cdh3 DataNode、yarn、hive、impala
一些注意事项:
操作系统为 CentOs6.2
Hadoop 版本为 CDH5.2
hostname 请使用小写,因为 kerberos 中区分大小写,而 hadoop 中会使用 hostname 的小写替换 _HOST,impala 直接使用 hostname 替换 _HOST。
开始之前,请确认 hadoop 集群部署安装成功,不管是否配置 HA,请规划好每个节点的角色。我这里为了简单,以三个节点的集群为例做说明,你可以参考本文并结合你的实际情况做调整。
请确认防火墙关闭,以及集群内和 kerberos 以及 ldap 服务器保持时钟同步。
cdh1 为管理节点,故需要做好 cdh1 到集群所有节点的无密码登陆,包括其本身。
集群中每个节点的 hosts 如下:
$ cat /etc/hosts
192.168.56.121 cdh1
192.168.56.122 cdh2
192.168.56.123 cdh3
为了方便管理集群,使用 cdh1 作为管理节点,并在 /opt/shell 目录编写了几脚本,/opt/shell/cmd.sh 用于批量执行命令:
$ cat /opt/shell/cmd.sh
for node in 121 122 123;do
echo "==============="192.168.56.$node"==============="
ssh 192.168.56.$node $1
/opt/shell/cmd.sh 用于批量执行命令:
$ cat /opt/shell/syn.sh
for node in 121 122 123;do
echo "==============="192.168.56.$node"==============="
scp -r $1 192.168.56.$node:$2
/opt/shell/cluster.sh 用于批量维护集群各个服务:
$ cat /opt/shell/cluster.sh
for node in 121 122 123;do
echo "==============="192.168.56.$node"==============="
ssh 192.168.56.$node 'for src in `ls /etc/init.d|grep '$1'`;do service $src '$2'; done'
2. 安装 kerberos
在 cdh1 节点修改 /etc/krb5.conf 如下:
default = FILE:/var/log/krb5libs.log
kdc = FILE:/var/log/krb5kdc.log
admin_server = FILE:/var/log/kadmind.log
[libdefaults]
default_realm = JAVACHEN.COM
dns_lookup_realm = false
dns_lookup_kdc = false
ticket_lifetime = 24h
renew_lifetime = 7d
forwardable = true
default_tgs_enctypes = aes256-cts-hmac-sha1-96
default_tkt_enctypes = aes256-cts-hmac-sha1-96
permitted_enctypes = aes256-cts-hmac-sha1-96
clockskew = 120
udp_preference_limit = 1
JAVACHEN.COM = {
kdc = cdh1
admin_server = cdh1
[domain_realm]
.javachen.com = JAVACHEN.COM
javachen.com = JAVACHEN.COM
修改 /var/kerberos/krb5kdc/kdc.conf 如下:
[kdcdefaults]
kdc_ports = 88
kdc_tcp_ports = 88
JAVACHEN.COM = {
#master_key_type = aes256-cts
acl_file = /var/kerberos/krb5kdc/kadm5.acl
dict_file = /usr/share/dict/words
max_renewable_life = 7d
max_life = 1d
admin_keytab = /var/kerberos/krb5kdc/kadm5.keytab
supported_enctypes = aes256-cts:normal aes128-cts:normal des3-hmac-sha1:normal arcfour-hmac:normal des-hmac-sha1:normal des-cbc-md5:normal des-cbc-crc:normal
default_principal_flags = +renewable, +forwardable
修改 /var/kerberos/krb5kdc/kadm5.acl 如下:
将 cdh1 上的 /etc/krb5.conf 同步到集群各个节点上:
sh /opt/shell/syn.sh /etc/krb5.conf /etc/krb5.conf
写了一个脚本安装和初始化 kerberos,供大家参考(详细的脚本,请参考
# install the kerberos components
yum install -y krb5-server
yum install -y openldap-clients
yum install -y krb5-workstation
rm -rf /var/kerberos/krb5kdc/*.keytab /var/kerberos/krb5kdc/prin*
kdb5_util create -r JAVACHEN.COM -s
chkconfig --level 35 krb5kdc on
chkconfig --level 35 kadmin on
service krb5kdc restart
service kadmin restart
echo -e "root\nroot" | kadmin.local -q "addprinc root/admin"
DNS=JAVACHEN.COM
HOSTNAME=`hostname -i`
#读取/etc/host文件中ip为 192.168.56 开头的机器名称并排除自己(kerberos 服务器)
for host in
`cat /etc/hosts|grep 192.168.56|grep -v $HOSTNAME|awk '{print $2}'` ;do
for user in
kadmin.local -q "addprinc -randkey $user/$host@$DNS"
kadmin.local -q "xst -k /var/kerberos/krb5kdc/$user-un.keytab $user/$host@$DNS"
for user in HTTP hive yarn mapred impala zookeeper zkcli hbase l do
kadmin.local -q "addprinc -randkey $user/$host@$DNS"
kadmin.local -q "xst -k /var/kerberos/krb5kdc/$user.keytab $user/$host@$DNS"
cd /var/kerberos/krb5kdc/
echo -e "rkt hdfs-un.keytab\nrkt HTTP.keytab\nwkt hdfs.keytab" | ktutil
#kerberos 重新初始化之后,还需要添加下面代码用于集成 ldap
kadmin.local -q "addprinc "
kadmin.local -q "addprinc -randkey ldap/"
kadmin.local -q "ktadd -k /etc/openldap/ldap.keytab ldap/"
/etc/init.d/slapd restart
#测试 ldap 是否可以正常使用
ldapsearch -x -b 'dc=javachen,dc=com'
运行上面的脚本,然后将上面生成的 keytab 同步到其他节点并设置权限:
sh /opt/shell/syn.sh /opt/keytab/hdfs.keytab /etc/hadoop/conf/
sh /opt/shell/syn.sh /opt/keytab/mapred.keytab /etc/hadoop/conf/
sh /opt/shell/syn.sh /opt/keytab/yarn.keytab /etc/hadoop/conf/
sh /opt/shell/syn.sh /opt/keytab/hive.keytab /etc/hive/conf/
sh /opt/shell/syn.sh /opt/keytab/impala.keytab /etc/impala/conf/
sh /opt/shell/syn.sh /opt/keytab/zookeeper.keytab /etc/zookeeper/conf/
sh /opt/shell/syn.sh /opt/keytab/zkcli.keytab /etc/zookeeper/conf/
sh /opt/shell/syn.sh /opt/keytab/sentry.keytab /etc/sentry/conf/
sh /opt/shell/cmd.sh "chown hdfs:hadoop /etc/hadoop/conf/hdfs.chmod 400 /etc/hadoop/conf/*.keytab"
sh /opt/shell/cmd.sh "chown mapred:hadoop /etc/hadoop/conf/mapred.chmod 400 /etc/hadoop/conf/*.keytab"
sh /opt/shell/cmd.sh "chown yarn:hadoop /etc/hadoop/conf/yarn.chmod 400 /etc/hadoop/conf/*.keytab"
sh /opt/shell/cmd.sh "chown hive:hadoop /etc/hive/conf/hive.chmod 400 /etc/hive/conf/*.keytab"
sh /opt/shell/cmd.sh "chown impala:hadoop /etc/impala/conf/impala.chmod 400 /etc/impala/conf/*.keytab"
sh /opt/shell/cmd.sh "chown zookeeper:hadoop /etc/zookeeper/conf/*.chmod 400 /etc/zookeeper/conf/*.keytab"
# sentry 只安装在 cdh1 节点
chown sentry:hadoop /etc/sentry/conf/*.chmod 400 /etc/sentry/conf/*.keytab
在集群中每个节点安装 kerberos 客户端:
sh /opt/shell/cmd.sh "yum install krb5-workstation -y"
批量获取 root/admin 用户的 ticket
sh /opt/shell/cmd.sh "echo root|kinit root/admin"
3. hadoop 集成 kerberos
更新每个节点上的 JCE 文件并修改 /etc/default/hadoop-hdfs-datanode,并且修改 hdfs、yarn、mapred、hive 的配置文件。
如果配置了 HA,则先配置 zookeeper 集成 kerberos。
同步配置文件:
sh /opt/shell/syn.sh /etc/hadoop/conf /etc/hadoop
sh /opt/shell/syn.sh /etc/zookeeper/conf /etc/zookeeper
sh /opt/shell/cmd.sh "cd /etc/hadoop/conf/; chown root:yarn container-executor. chmod 400 container-executor.cfg"
sh /opt/shell/syn.sh /etc/hive/conf /etc/hive
接下来就是依次获取每个服务对应的 ticket 并启动对应的服务,我创建了一个脚本 /opt/shell/manager_cluster.sh 来做这件事:
#!/bin/bash
command=$2
if [ X"$role" == X"hdfs" ];then
dir=hadoop
if [ X"$role" == X"yarn" ];then
dir=hadoop
if [ X"$role" == X"mapred" ];then
dir=hadoop
echo $dir $role $command
for node in 121 122 123 ;do
echo "========192.168.56.$node========"
ssh 192.168.56.$node '
host=`hostname -f| tr "[:upper:]" "[:lower:]"`
path="'$role'/$host"
#echo $path
principal=`klist -k /etc/'$dir'/conf/'$role'.keytab | grep $path | head -n1 | cut -d " " -f5`
echo $principal
if [ X"$principal" == X ]; then
principal=`klist -k /etc/'$dir'/conf/'$role'.keytab | grep $path | head -n1 | cut -d " " -f4`
echo $principal
if [ X"$principal" == X ]; then
echo "Failed to get hdfs Kerberos principal"
kinit -r 24l -kt /etc/'$dir'/conf/'$role'.keytab $principal
if [ $? -ne 0 ]; then
echo "Failed to login as hdfs by kinit command"
for src in `ls /etc/init.d|grep '$role'`;do service $src '$command'; done
启动命令:
# 启动 zookeeper
sh /opt/shell/manager_cluster.sh zookeeper restart
# 获取 hdfs 服务的 ticket
sh /opt/shell/manager_cluster.sh hdfs status
# 使用普通脚本依次启动 hadoop-hdfs-zkfc、hadoop-hdfs-journalnode、hadoop-hdfs-namenode、hadoop-hdfs-datanode
sh /opt/shell/cluster.sh hadoop-hdfs-zkfc restart
sh /opt/shell/cluster.sh hadoop-hdfs-journalnode restart
sh /opt/shell/cluster.sh hadoop-hdfs-namenode restart
sh /opt/shell/cluster.sh hadoop-hdfs-datanode restart
sh /opt/shell/manager_cluster.sh yarn restart
sh /opt/shell/manager_cluster.sh mapred restart
sh /opt/shell/manager_cluster.sh hive restart
修改 impala 配置文件并同步到其他节点,然后启动 impala 服务:
\cp /etc/hadoop/conf/core-site.xml /etc/impala/conf/
\cp /etc/hadoop/conf/hdfs-site.xml /etc/impala/conf/
\cp /etc/hive/conf/hive-site.xml /etc/impala/conf/
sh /opt/shell/syn.sh /etc/impala/conf /etc/impala/
sh /opt/shell/syn.sh /etc/default/impala /etc/default/impala
sh /opt/shell/manager_cluster.sh impala restart
到此,集群应该启动成功了。
3 使用 java 代码测试 kerberos
在 hdfs 中集成 kerberos 之前,可以先使用下面代码(Krb.java)进行测试:
import com.sun.security.auth.module.Krb5LoginModule;
import javax.security.auth.Subject;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.util.HashMap;
import java.util.Map;
import java.util.Properties;
public class Krb {
private void loginImpl(final String propertiesFileName) throws Exception {
System.out.println("NB: system property to specify the krb5 config: [java.security.krb5.conf]");
//System.setProperty("java.security.krb5.conf", "/etc/krb5.conf");
System.out.println(System.getProperty("java.version"));
System.setProperty("sun.security.krb5.debug", "true");
final Subject subject = new Subject();
final Krb5LoginModule krb5LoginModule = new Krb5LoginModule();
final Map&String,String& optionMap = new HashMap&String,String&();
if (propertiesFileName == null) {
//optionMap.put("ticketCache", "/tmp/krb5cc_1000");
optionMap.put("keyTab", "/etc/krb5.keytab");
optionMap.put("principal", "foo"); // default realm
optionMap.put("doNotPrompt", "true");
optionMap.put("refreshKrb5Config", "true");
optionMap.put("useTicketCache", "true");
optionMap.put("renewTGT", "true");
optionMap.put("useKeyTab", "true");
optionMap.put("storeKey", "true");
optionMap.put("isInitiator", "true");
File f = new File(propertiesFileName);
System.out.println("======= loading property file ["+f.getAbsolutePath()+"]");
Properties p = new Properties();
InputStream is = new FileInputStream(f);
p.load(is);
} finally {
is.close();
optionMap.putAll((Map)p);
optionMap.put("debug", "true"); // switch on debug of the Java implementation
krb5LoginModule.initialize(subject, null, new HashMap&String,String&(), optionMap);
boolean loginOk = krb5LoginModule.login();
System.out.println("======= login:
" + loginOk);
boolean commitOk = krb5LoginModule.commit();
System.out.println("======= commit: " + commitOk);
System.out.println("======= Subject: " + subject);
public static void main(String[] args) throws Exception {
System.out.println("A property file with the login context can be specified as the 1st and the only paramater.");
final Krb krb = new Krb();
krb.loginImpl(args.length == 0 ? null : args[0]);
创建一个配置文件krb5.properties:
keyTab=/etc/hadoop/conf/hdfs.keytab
principal=hdfs/
doNotPrompt=true
refreshKrb5Config=true
useTicketCache=true
renewTGT=true
useKeyTab=true
storeKey=true
isInitiator=true
编译 java 代码并运行:
# 先销毁当前 ticket
$ kdestroy
$ javac Krb.java
$ java -cp . Krb ./krb5.properties
4. 安装 ldap
使用下面命令在 cdh1 节点快速安装 ldap-server:
yum install db4 db4-utils db4-devel cyrus-sasl* krb5-server-ldap -y
yum install openldap openldap-servers openldap-clients openldap-devel compat-openldap -y
# 更新配置库:
rm -rf /var/lib/ldap/*
cp /usr/share/openldap-servers/DB_CONFIG.example /var/lib/ldap/DB_CONFIG
chown -R ldap.ldap /var/lib/ldap
# 备份原来的 slapd-conf
cp -rf /etc/openldap/slapd.d /etc/openldap/slapd.d.bak
cp /usr/share/doc/krb5-server-ldap-1.10.3/kerberos.schema /etc/openldap/schema/
touch /etc/openldap/slapd.conf
echo "include /etc/openldap/schema/corba.schema
include /etc/openldap/schema/core.schema
include /etc/openldap/schema/cosine.schema
include /etc/openldap/schema/duaconf.schema
include /etc/openldap/schema/dyngroup.schema
include /etc/openldap/schema/inetorgperson.schema
include /etc/openldap/schema/java.schema
include /etc/openldap/schema/misc.schema
include /etc/openldap/schema/nis.schema
include /etc/openldap/schema/openldap.schema
include /etc/openldap/schema/ppolicy.schema
include /etc/openldap/schema/collective.schema
include /etc/openldap/schema/kerberos.schema" & /etc/openldap/slapd.conf
echo -e "pidfile /var/run/openldap/slapd.pid\nargsfile /var/run/openldap/slapd.args" && /etc/openldap/slapd.conf
slaptest -f /etc/openldap/slapd.conf -F /etc/openldap/slapd.d
chown -R ldap:ldap /etc/openldap/slapd.d && chmod -R 700 /etc/openldap/slapd.d
chkconfig --add slapd
chkconfig --level 345 slapd on
/etc/init.d/slapd restart
集成 kerberos:
# 创建管理员用户
kadmin.local -q "addprinc "
kadmin.local -q "addprinc -randkey ldap/"
rm -rf /etc/openldap/ldap.keytab
kadmin.local -q "ktadd -k /etc/openldap/ldap.keytab ldap/"
chown -R ldap:ldap /etc/openldap/ldap.keytab
/etc/init.d/slapd restart
创建 modify.ldif 文件用于更新数据库:
dn: olcDatabase={2}bdb,cn=config
changetype: modify
replace: olcSuffix
olcSuffix: dc=javachen,dc=com
dn: olcDatabase={2}bdb,cn=config
changetype: modify
replace: olcRootDN
# Temporary lines to allow initial setup
olcRootDN: uid=ldapadmin,ou=people,dc=javachen,dc=com
dn: olcDatabase={2}bdb,cn=config
changetype: modify
add: olcRootPW
olcRootPW: secret
dn: cn=config
changetype: modify
add: olcAuthzRegexp
olcAuthzRegexp: uid=([^,]*),cn=GSSAPI,cn=auth uid=$1,ou=people,dc=javachen,dc=com
dn: olcDatabase={2}bdb,cn=config
changetype: modify
add: olcAccess
# Everyone can read everything
olcAccess: {0}to dn.base="" by * read
# The ldapadm dn has full write access
olcAccess: {1}to * by dn="uid=ldapadmin,ou=people,dc=javachen,dc=com" write by * read
运行下面命令更新数据库:
ldapmodify -Y EXTERNAL -H ldapi:/// -f modify.ldif
添加用户和组,创建 setup.ldif 如下:
dn: dc=javachen,dc=com
objectClass: top
objectClass: dcObject
objectclass: organization
o: javachen com
dc: javachen
dn: ou=people,dc=javachen,dc=com
objectclass: organizationalUnit
ou: people
description: Users
dn: ou=group,dc=javachen,dc=com
objectClass: organizationalUnit
dn: uid=ldapadmin,ou=people,dc=javachen,dc=com
objectClass: inetOrgPerson
objectClass: posixAccount
objectClass: shadowAccount
cn: LDAP admin account
uid: ldapadmin
sn: ldapadmin
uidNumber: 1001
gidNumber: 100
homeDirectory: /home/ldap
loginShell: /bin/bash
运行下面命令导入到数据库:
ldapadd -x -D "uid=ldapadmin,ou=people,dc=javachen,dc=com" -w secret -f setup.ldif
接下来,可以在 ldap 服务器上创建一些本地系统用户,然后将这些用户导入到 ldap 服务中。
先安装 migrationtools 然后修改 /usr/share/migrationtools/migrate_common.ph 文件中的 defalut DNS domain 和 defalut base。
# 创建 admin 组
groupadd admin
# 创建 test 和 hive 用户,用于后面测试 sentry
useradd test hive
usermod -G admin test
usermod -G admin hive
# 将关键用户导入到 ldap
grep -E "bi_|hive|test" /etc/passwd
&/opt/passwd.txt
/usr/share/migrationtools/migrate_passwd.pl /opt/passwd.txt /opt/passwd.ldif
ldapadd -x -D "uid=ldapadmin,ou=people,dc=javachen,dc=com" -w secret -f /opt/passwd.ldif
# 将 admin 组导入到 ldap
grep -E "admin" /etc/group
&/opt/group.txt
/usr/share/migrationtools/migrate_group.pl /opt/group.txt /opt/group.ldif
ldapadd -x -D "uid=ldapadmin,ou=people,dc=javachen,dc=com" -w secret -f /opt/group.ldif
然后,你可以依次为每个用户设置密码,使用下面命令:
ldappasswd -x -D 'uid=ldapadmin,ou=people,dc=javachen,dc=com' -w secret "uid=hive,ou=people,dc=javachen,dc=com" -S
另外,这些用户和组都是存在于 ldap 服务器上的,需要将其远程挂载到 hadoop 的每个节点上,否则,你需要在每个节点创建对应的用户和组(目前,测试是这样的)。
6. 集成 sentry
这部分建议使用数据库的方式存储规则,不建议生产环境使用文件保存方式。
详细的配置,请参考
通过 beeline 使用 hive/ 连接 hive-server2 创建一些角色和组:
create role admin_role;
GRANT ALL ON SERVER server1 TO ROLE admin_role;
GRANT ROLE admin_role TO GROUP admin;
GRANT ROLE admin_role TO GROUP hive;
create role test_role;
GRANT ALL ON DATABASE testdb TO ROLE test_role;
GRANT ALL ON DATABASE default TO ROLE test_role;
GRANT ROLE test_role TO GROUP test;
上面 amdin 和 hive 组具有所有数据库的管理员权限,而 test 组只有 testdb 和 default 库的读写权限。
在 impala-shell 中通过 ldap 的方式传入不同的用户,可以测试读写权限。
7. 如何添加新用户并设置权限?
下面以 test2 账号为例,说明如何添加新的用户并设置访问权限。test2 需要具有以下权限
dw_default 库:读权限
dw_user 库 t1表:读权限
dw_user 库 t2 表:读权限
在 LDAP 服务器上 上添加 LDAP 用户并设置密码,首先添加系统用户:
useradd test2
然后使用 LDAP 工具将该用户导入到 LDAP:
grep -E "test2" /etc/passwd
&/opt/passwd.txt
/usr/share/migrationtools/migrate_passwd.pl /opt/passwd.txt /opt/passwd.ldif
ldapadd -x -D "uid=ldapadmin,ou=people,dc=javachen,dc=com" -w secret -f /opt/passwd.ldif
给 test2 用户生成一个随机密码,然后修改 LDAP 中 test2 的密码:
ldappasswd -x -D 'uid=ldapadmin,ou=people,dc=javachen,dc=com' -w secret "uid=test2,ou=people,dc=javachen,dc=com" -S
在每台datanode机器上创建 test2 用户和 secure_analyst 分组,test2 属于 secure_analyst 分组:
sh /opt/shell/cmd.sh "groupadd secure_ useradd test2; usermod -G secure_analyst,test2 test2"
在 hive 中创建角色:
运行 beeline -u "jdbc:hive2://cdh1:10000/principal=hive/",然后输入下面语句在 sentry 中创建角色和授予权限给 secure_analyst 组:
create role dw_default_r;
GRANT SELECT ON DATABASE dw_default TO ROLE dw_default_r;
create role dw_user;
GRANT SELECT ON DATABASE dw_user TO ROLE dw_user_r;
use dw_user;
create role dw_user_secure_r;
GRANT SELECT ON table t1 TO ROLE dw_user_secure_r;
GRANT SELECT ON table t2 TO ROLE dw_user_secure_r;
GRANT ROLE dw_default_r TO GROUP secure_analyst;
GRANT ROLE dw_user_secure_r TO GROUP secure_analyst;
然后,需要 impala 刷新元数据,然后进行测试,可能会需要一些时间 impala-catalog 才能刷新过来。
最后进行测试,这部分略。
用云栖社区APP,舒服~
【云栖快讯】青年们,一起向代码致敬,来寻找第83行吧,云栖社区邀请大神彭蕾、多隆、毕玄、福贝、点评Review你的代码,参与互动者将选取50位精彩回复赠送“向代码致敬”定制T恤1件,最终成为“多隆奖”的小伙伴还将获得由阿里巴巴提供的“多隆奖”荣誉证书和奖杯。&&
构建于阿里云 ECS 弹性虚拟机之上,利用开源大数据生态系统,包括 Hadoop、Spark...
一个稳定可靠的集中式访问控制服务。您可以通过访问控制将阿里云资源的访问及管理权限分配给您的企...
以阿里云成熟的商业化云服务为基础,为游戏开发者、运营企业提供专属集群、尊享VIP服务、专项扶...
为您提供简单高效、处理能力可弹性伸缩的计算服务,帮助您快速构建更稳定、安全的应用,提升运维效...没有更多推荐了,
不良信息举报
举报内容:
超详细从零记录Hadoop2.7.3完全分布式集群部署过程
举报原因:
原文地址:
原因补充:
最多只允许输入30个字
加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!如何为大数据处理构建高性能Hadoop集群
 作者: 曾智强 编辑:
  部署实施Hadoop  各个节点硬件的主要要求是市县计算、内存、网络以及存储等四个资源的平衡。目前常用的并被誉为&最佳&的解决方案是采用相对较低成本的旧有硬件,部署足够多的服务器以应对任何可能的故障,并部署一个完整机架的系统。  Hadoop模式要求服务器与SAN或者NAS进行直接连接存储(DAS)。采用DAS主要有三个原因,在标准化配置的集群中,节点的缩放数以千计,随着存储系统的成本、低延迟性以及存储容量需求不断提高,简单配置和部署个主要的考虑因素。随着极具成本效益的1TB磁盘的普及,可使大型集群的TB级数据存储在DAS之上。这解决了传统方法利用SAN进行部署极其昂贵的困境,如此多的存储将使得Hadoop和数据存储出现一个令人望而却步的起始成本。有相当大一部分用户的Hadoop部署构建都是采用大容量的DAS服务器,其中数据节点大约1-2TB,名称控制节点大约在1-5TB之间,具体如下图所示:  来源:Brad Hedlund, DELL公司  对于大多数的Hadoop部署来说,基础设施的其他影响因素可能还取决于配件,如服务器内置的千兆以太网卡或千兆以太网交换机。上一代的CPU和内存等硬件的选择,可根据符合成本模型的需求,采用匹配数据传输速率要求的千兆以太网接口来构建低成本的解决方案。采用万兆以太网来部署Hadoop也是相当不错的选择。
第1页:第2页:
大学生分期购物销量榜
已有条评论
IT168企业级超详细从零记录Hadoop2.7.3完全分布式集群部署过程
超详细从零记录Ubuntu16.04.1 3台服务器上Hadoop2.7.3完全分布式集群部署过程。包含,Ubuntu服务器创建、远程工具连接配置、Ubuntu服务器配置、Hadoop文件配置、Hadoop格式化、启动。(首更时间日)
主机名/hostnameIP角色
hadoop.131ResourceManager/NameNode/SecondaryNameNode
hadoop.132NodeManager/DataNode
hadoop.133NodeManager/DataNode
用VMware创建3个Ubuntu用mobaxterm远程连接创建好的虚拟机配置Ubuntu虚拟机源、ssh无密匙登录、jdk 配置Hadoop集群文件(Github) 启动Hadoop集群、在Windows主机上显示集群状态。
1.2.提前准备安装包
Windows10(宿主操作) VMware12 workstation(虚拟机) Ubuntu16.04.1 LTS 服务器版 Hadoop2.7.3 jdk1.8 MobaXterm(远程连接工具) Github源码,记得start哦(CSDN博文中全部源码公开至个人github)
2. VMvare安装Ubuntu16.04.1LTS服务器版过程
2.1.注意在安装时username要一致如xiaolei,即主机用户名。而主机名hostname可不同如hadoop1,hadoop2,hadoop3.或者master,slave1,slave2.在本篇博文中用hadoop1,2,3区分hostname主机名。
2.2.VMvare安装Ubuntu16.04.1LTS桌面版过程
2.3.在VMvare中选择 文件 然后 新建虚拟机
2.4选择典型安装
2.5.选择下载好的Ubuntu64位 16.04.1 LTS服务器版镜像
2.6.个性化设置
2.7.虚拟机命名及文件路径 wangxiaolei \ hadoop1等 随意可更换
2.8.磁盘分配,默认即可,磁盘大小可以根据自身硬盘空间调节(不要太小)
2.9.然后就是等待安装完成,输入登录名 xiaolei 登录密码**&
建立好的虚拟机如下
通过ipconfig命令查看服务器ip地址
IP 192.168.193.131 默认主机名ubuntu
IP 192.168.193.132 默认主机名ubuntu
IP 192.168.193.133 默认主机名ubuntu
下一步会修改主机名hostname
3. 配置Ubuntu系统(服务器版在VMware中操作不方便,通过远程在putty或者MobaXterm操作比较快捷些)
3.1 安装ssh即可。这里不需要 ssh-keygen。
打开终端或者服务器版命令行
查看是否安装(ssh)openssh-server,否则无法远程连接。
sudo apt install openssh-server
3.2.安装ssh后,可以通过工具(putty或者MobaXterm)远程连接已经建立好的服务器(Hadoop1,Hadoop2,Hadoop3)
同样三个虚拟机建立连接
3.3.更换为国内源(清华大学帮助文档)
在Hadoop1、Hadoop2、Hadoop3中
xiaolei@ubuntu:~$ sudo vi /etc/apt/sources.list
# 默认注释了源码镜像以提高 apt update 速度,如有需要可自行取消注释
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial main main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial-updates main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial-updates main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial-backports main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial-backports main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial-security main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial-security main restricted universe multiverse
# 预发布软件源,不建议启用
# deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial-proposed main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial-proposed main restricted universe multiverse
xiaolei@ubuntu:~$ sudo apt update
3.4.安装vim编辑器,默认自带vi编辑器
sudo apt install vim
更新系统(服务器端更新量小,桌面版Ubuntu更新量较大,可以暂时不更新)
sudo apt-get upgrade
3.5.修改Ubuntu服务器hostname主机名,主机名和ip是一一对应的。
#在192.168.193.131
xiaolei@ubuntu:~$ sudo hostname hadoop1
#在192.168.193.131
xiaolei@ubuntu:~$ sudo hostname hadoop2
#在192.168.193.131
xiaolei@ubuntu:~$ sudo hostname hadoop3
#断开远程连接,重新连接即可看到已经改变了主机名。
3.6.增加hosts文件中ip和主机名对应字段
在Hadoop1,2,3中
xiaolei@hadoop1:~$ sudo vim /etc/hosts
192.168.193.131 hadoop1
192.168.193.132 hadoop2
192.168.193.133 hadoop3
3.7.更改系统时区(将时间同步更改为北京时间)
xiaolei@hadoop1:~$ date
Wed Oct 26 02:42:08 PDT 2016
xiaolei@hadoop1:~$ sudo tzselect
根据提示选择Asia China Beijing Time yes
最后将Asia/Shanghai shell scripts 复制到/etc/localtime
xiaolei@hadoop1:~$ sudo cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
xiaolei@ubuntu:~$ date
Wed Oct 26 17:45:30 CST 2016
4. Hadoop集群完全分布式部署过程
JDK配置 Hadoop集群部署
4.1.安装JDK1.8 (配置源码Github,记得start哦)
4.1.1将所需文件(Hadoop2.7.3、JDK1.8)上传至Hadoop1服务器(可以直接复制粘贴)
4.1.2.解压缩并将jdk放置/opt路径下
xiaolei@hadoop1:~$ tar -zxf jdk-8u111-linux-x64.tar.gz
hadoop1@hadoop1:~$ sudo mv jdk1.8.0_111 /opt/
[sudo] password for hadoop1:
xiaolei@hadoop1:~$
4.1.3.配置环境变量
编写环境变量脚本并使其生效
xiaolei@hadoop1:~$ sudo vim /etc/profile.d/jdk1.8.sh
输入内容(或者在我的github上下载jdk环境配置脚本源码)
# author:wangxiaolei 王小雷
# blog:http://blog.csdn.net/dream_an
export JAVA_HOME=/opt/jdk1.8.0_111
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=${JAVA_HOME}/bin:$PATH
xiaolei@hadoop1:~$ source /etc/profile
4.1.4.验证jdk成功安装
xiaolei@hadoop1:~$ java -version
java version &1.8.0_111&
(TM) SE Runtime Environment (build 1.8.0_111-b14)
Java HotSpot(TM) 64-Bit Server VM (build 25.111-b14, mixed mode)
4.1.5.同样方法安装其他集群机器。
也可通过scp命令
#注意后面带 : 默认是/home/xiaolei路径下
xiaolei@hadoop1:~$ scp jdk-8u111-linux-x64.tar.gz hadoop2:
命令解析:scp 远程复制 -r 递归 本机文件地址 app是文件,里面包含jdk、Hadoop包 远程主机名@远程主机ip:远程文件地址
4.2.集群ssh无密匙登录
4.2.1.在hadoop1,hadoop2,hadoop3中执行
sudo apt install ssh
sudo apt install rsync
xiaolei@ubuntu:~$ ssh-keygen -t rsa //一路回车就好
4.2.2.在 Hadoop1(master角色) 执行,将~/.ssh/下的id_rsa.pub公私作为认证发放到hadoop1,hadoop2,hadoop3的~/.ssh/下
ssh-copy-id -i ~/.ssh/id_rsa.pub hadoop1
ssh-copy-id -i ~/.ssh/id_rsa.pub hadoop2
ssh-copy-id -i ~/.ssh/id_rsa.pub hadoop3
4.2.3.然后在 Hadoop1 上登录其他Linux服务器不需要输入密码即成功。
#不需要输入密码
ssh hadoop2
5.hadoop完全分布式集群文件配置和启动
在hadoop1上配置完成后将Hadoop包直接远程复制scp到其他Linux主机即可。
Linux主机Hadoop集群完全分布式分配
5.1.Hadoop主要文件配置(Github源码地址)
5.1.1.在Hadoop1,2,3中配置Hadoop环境变量
xiaolei@hadoop2:~$ sudo vim /etc/profile.d/hadoop2.7.3.sh
# Author:wangxiaolei 王小雷
# Blog:http://blog.csdn.net/dream_an
# Github:https://github.com/wxiaolei
# Path:/etc/profile.d/hadoop2.7.3.sh
export HADOOP_HOME=&/opt/hadoop-2.7.3&
export PATH=&$HADOOP_HOME/bin:$PATH&
export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop
export YARN_CONF_DIR=$HADOOP_HOME/etc/hadoop
5.1.2.配置 hadoop-env.sh 增加如下内容
export JAVA_HOME=/opt/jdk1.8.0_111
5.1.3.配置 core-site.xml
fs.defaultFS
hdfs://Hadoop1:9000
io.file.buffer.size
hadoop.tmp.dir
/home/xiaolei/hadoop/tmp
5.1.4.配置 hdfs-site.xml
dfs.namenode.secondary.http-address
hadoop1:50090
dfs.replication
dfs.namenode.name.dir
file:/home/xiaolei/hadoop/hdfs/name
dfs.datanode.data.dir
file:/home/xiaolei/hadoop/hdfs/data
5.1.5.配置yarn-site.xml
yarn.nodemanager.aux-services
mapreduce_shuffle
yarn.resourcemanager.address
hadoop1:8032
yarn.resourcemanager.scheduler.address
hadoop1:8030
yarn.resourcemanager.resource-tracker.address
hadoop1:8031
yarn.resourcemanager.admin.address
hadoop1:8033
yarn.resourcemanager.webapp.address
hadoop1:8088
5.1.6.配置mapred-site.xml
mapreduce.framework.name
mapreduce.jobhistory.address
hadoop1:10020
mapreduce.jobhistory.address
hadoop1:19888
5.1.7.复制Hadoop配置好的包到其他Linux主机
xiaolei@hadoop1:~$ scp -r hadoop-2.7.3 hadoop3:
将每个Hadoop包sudo mv移动到/opt/路径下。不要sudo cp,注意权限。
xiaolei@hadoop1:sudo mv hadoop-2.7.3 /opt/
5.2.格式化节点
在hadoop1上执行
xiaolei@hadoop1:/opt/hadoop-2.7.3$ hdfs namenode -format
5.3.hadoop集群全部启动
### 5.3.1. 在Hadoop1上执行
xiaolei@hadoop1:/opt/hadoop-2.7.3/sbin$ ./start-all.sh
5.3.2.其他主机上jps
5.3.3.在主机上查看,博主是Windows10,直接在中输入hadoop1 集群地址即可。
http://192.168.193.131:8088/
5.3.4. Github源码位置&&超详细从零记录Hadoop2.7.3完全分布式集群部署过程
5.4.可能问题:
权限问题:
chown -R xiaolei:xiaolei hadoop-2.7.3
解析:将hadoop-2.7.3文件属主、组更换为xiaolei:xiaolei
chmod 777 hadoop
解析:将hadoop文件权限变成421 421 421 可写、可读可、执行即 7 7 7
查看是否安装openssh-server
ps -e|grep ssh
安装 openssh-server
sudo apt install openssh-server
问题解决:
Network error: Connection refused
Network error: Connection refused

我要回帖

更多关于 redis集群部署 的文章

 

随机推荐