集群提交客户机搭建步骤

客户可以通过搭建独立于集群外的客户机向EMR集群提交任务,执行客户端命令等。

环境要求:

网络:客户机需和emr集群保持网络互通,一般为同一vpc,同一安全组下;

系统:CentOS 7.x 64bit;

JAVA: JDK 1.8 版本;

手工搭建步骤:

1 拷贝如下脚本内容至需要安装的客户机,保存为 emr-install-clients.sh:

#!/bin/bash
export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/bin:/root/bin

# emr集群master1 内网ip地址 和 root密码
masterip="$1"
masterpwd="$2"

[[ -n $masterpwd ]] || {
    echo "usage: $0 masterip rootpassword"
    exit
}

[ $USER = root ] || {
    echo "must run with root, quit now."
    exit 1
}


[ -x "$(which expect 2>/dev/null)" ] || {
    echo "install expect ..."
    yum -y install expect &>>/dev/null
}
[ -x "$(which expect)" ] || {
    echo "install expect failed."
    exit 1
}
[ -x "$(which rsync 2>/dev/null)" ] || {
    echo "install rsync ..."
    yum -y install rsync &>>/dev/null
}
[ -x "$(which rsync)" ] || {
    echo "install rsync failed."
    exit 1
}


rsync_file() {
    expect <<EOF
        set timeout -1
        spawn rsync -aP --delete $1 $2
        expect {
            timeout { puts stderr "TimedOut"; exit 1; exp_continue }
            "*yes/no" { send "yes\r"; exp_continue }
            "refused" { puts stderr "ConnectionRefused"; exit 1; exp_continue }
            "*assword" { send "$masterpwd\r";
                expect {
                    "denied" { puts stderr "WrongPassword"; exit 1 }
                }
            }
            eof
        }
EOF
}

[ -d /usr/local/service ] && {
    echo "/usr/local/service already exists, will overwrite all files, are you sure? (yes|no)"
    read flag
    [[ "$flag" = yes ]] || {
        echo "You choose not to continue, quit now."
        exit
    }
}

[ -d /usr/local/jdk ] && {
    echo "/usr/local/jdk already exists, will overwrite all files, are you sure? (yes|no)"
    read flag
    [[ "$flag" = yes ]] || {
        echo "You choose not to continue, quit now."
        exit
    }
}

# 添加用户
id hadoop &>>/dev/null || {
    echo "add hadoop user ..."
    useradd hadoop
}


id hadoop &>>/dev/null || {
    echo "add hadoop user failed."
    exit 1
}

sync

# 拷贝jdk
echo "copy jdk ..."
rsync_file  $masterip:/usr/local/jdk/ /usr/local/jdk/
[ $? -eq 0 ] || {
    echo "copy jdk failed."
    exit 1
}
# 拷贝各类客户端
echo "copy clients ..."
rsync_file  $masterip:/usr/local/service/ /usr/local/service/
[ $? -eq 0 ] || {
    echo "copy clients failed."
    exit 1
}
# 创建工作目录
mkdir -p /data/emr
# 修改文件权限
chown -R hadoop:hadoop /data/emr
# 修改环境变量配置,将以下内容添加到 /etc/profile 中
grep -wq HADOOP_HOME /etc/profile || {
    cat >>/etc/profile<<EOF
export JAVA_HOME=/usr/local/jdk
export HADOOP_HOME=/usr/local/service/hadoop
export HIVE_HOME=/usr/local/service/hive
export HBASE_HOME=/usr/local/service/hbase
export SPARK_HOME=/usr/local/service/spark
export STORM_HOME=/usr/local/service/storm
export SQOOP_HOME=/usr/local/service/sqoop
export KYLIN_HOME=/usr/local/service/kylin
PATH=\$JAVA_HOME/bin:\$HADOOP_HOME/bin:\$HIVE_HOME/bin:\$HBASE_HOME/bin:\$SPARK_HOME/bin:\$STORM_HOME/bin:\$SQOOP_HOME/bin:\$KYLIN_HOME/bin:\$PATH
EOF
}

cat <<EOF

clients install finished !
EOF

2 执行脚本部署客户端:

su - root
chmod u+x emr-install-clients.sh
./emr-install-clients.sh 主节点内网ip地址 主节点root密码

测试客户端:

# 切换hadoop用户,执行客户端命令
su - hadoop
source /etc/profile
hive -e "SHOW DATABASES;"

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

编辑于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏逸鹏说道

用户不在sudoers 文件中。此事将被报告

跨平台系列汇总:http://www.cnblogs.com/dunitian/p/4822808.html#linux 异常处理汇总-服 务 器 http:/...

37780
来自专栏XAI

ActiveMQ介绍

1、ActiveMQ服务器工作模型       通过ActiveMQ消息服务交换消息。消息生产者将消息发送至消息服务,消息消费者则从消息服务接收这些消息。这些消...

23990
来自专栏java思维导图

RESTful API 最佳实践(阮一峰)

它的大原则容易把握,但是细节不容易做对。本文总结 RESTful 的设计细节,介绍如何设计出易于理解和使用的 API。

74320
来自专栏蜉蝣禅修之道

ssh隧道与代理

35340
来自专栏北京马哥教育

linux、mysql、nginx、tomcat 环境下压力测试的主要调试参数

一、linux 系统内核参数 /etc/sysctl.conf文件常用参数 net.core.netdev_max_backlog = 32768 #允许送到队...

32770
来自专栏极客慕白的成长之路

HTTP协议原理及实践

HTTP是在应用层,基于传输层 0x1 低三层 物理层主要作用是定义物理设备如何传输数据 数据链路层在通信的实体间建立数据链路连接 网络层为数据在结...

13030
来自专栏SDNLAB

怎样配置开发环境来调试SDN应用程序

“工欲善其事,必先利其器”。我们在基于某一个控制器开发SDN应用程序的时候,常常会遇到这样的问题,怎样去调试一个应用程序。 ? 相信大家第一个程序开发是基于集成...

370120
来自专栏Python、Flask、Django

sublime处理批量修改问题。

11220
来自专栏埋名

常见HTTP/FTP/WebSockets状态码大全

这一类型的状态码,代表请求已被接受,需要继续处理。这类响应是临时响应,只包含状态行和某些可选的响应头信息,并以空行结束。由于HTTP/1.0协议中没有定义任何1...

34930
来自专栏林德熙的博客

关于Host(主机) 关于Resord Type(记录类型)

要指向空间商提供的 IP 地址,选择「类型 A」,要指向一个域名,选择「类型 CNAME」

12210

扫码关注云+社区

领取腾讯云代金券