虚拟机的hadoop运行环境构建

 目录

1.环境需求以及需要的包

2.虚拟机的初步配置

3.虚拟机环境准备

4.克隆虚拟机

5.ip地址配置

6.xhell配置 

7.jdk和hadoop包的解压

8.hadoop的本地运行

9.ssh无密登录配置

10.xsync集群分发脚本

11.集群配置

12.启动集群

13、常用脚本


1.环境需求以及需要的包

1、vmware环境pro17

2、虚拟光盘CentOS-7.5-x86_64-DVD-1804.iso

3、jdk-8u212-linux-x64.tar

4、hadoop-3.1.3.tar

2.虚拟机的初步配置

在新建虚拟环境时大多数都选下一步就行,以下小部分可以按我下面的步骤进行

在选择虚拟机存储位置时可以设立一个专门的文件夹方便管理。(也就是下图的位置(L)那)

同时之后的磁盘文件也放同一个位置方便管理

这里的处理器数量可以选1或者2(过多要考虑硬件以及可能影响速率),处理器内核数量2加快处理能力

选4gb提高效率,要考虑自身电脑的内存大小,确保能同时启动三个虚拟机也就是要有3×4=12的内存大小如果没有就看情况减小

同理要确保自身电脑有4个30g也就是120g的硬盘空间,30gb磁盘才够用

创建后虚拟机的构建读条那里等它读完就好,也不用管

3.虚拟机环境准备

ping www.baidu.com

查看能不能通网

如果不行可以参考

虚拟机网络配置教程,ping不通的几种原因及解决办法_ping不通虚拟机ip地址的原因-CSDN博客

进入管理员模式方便操作

Extra Packages for Enterprise Linux(epel)是为“红帽系”的操作系统提供额外的软件包,适用于RHEL、CentOS和Scientific Linux。相当于是一个软件仓库

如果安装的linux是最小系统版还要安装net-tools以及vim,安装桌面版的不用再安装。(按上面配置虚拟机步骤的就默认是桌面版)

yum install -y epel-release

时出现

解决方法:CentOS7 使用 YUM 安装时报错:cannot find a valid baseurl for repo:base/7/x86_64的解决方法_centos7 在使用yum时,未找到有效的baseurl-CSDN博客

关闭防火墙以及防火墙开机自启

systemctl stop firewalld

systemctl disable firewalld.service


建立新用户(看情况选做,毕竟建虚拟机就自带用户,也就是虚拟机开启要输密码时头像下面那个用户名)

增加用户名和密码

useradd 用户名

passwd 用户名

i进入修改 Esc退出修改模式 :wq! 强制保存退出

vim /etc/sudoers

使普通用户有root权限使后续操作简单点

找到

## Allows people in group wheel to run all commands

%wheel  ALL=(ALL)       ALL

在下面加上

注意更改“用户名”为虚拟机开启要输密码时头像下面那个用户名,又或者你新建的用户名

下面步骤的“用户名”同理


创建用于管理解压的包以及设定包的用户组

mkdir /opt/module

mkdir /opt/software

chown 用户名:用户名 /opt/module

chown 用户名:用户名 /opt/software
cd/opt

ll

查看用户组

卸载虚拟机自带的jdk然后重启

rpm -qa | grep -i java | xargs -n1 rpm -e --nodeps
reboot

4.克隆虚拟机

 以下是虚拟机的锁屏后不需要重新输密码以及不黑屏的教程(可选做毕竟后两步就直接用xshell了)

关闭第一台虚拟机后克隆三台虚拟机


5.ip地址配置

修改虚拟机的ip(四台虚拟机都要配置

vim /etc/sysconfig/network-scripts/ifcfg-ens33

直接把里面内容删了然后修改代码(注意每台虚拟机的IPADDR都要不同也就是

master机可以是192.168.128.100

slave1机可以是192.168.128.101,以此类推

DEVICE=ens33
TYPE=Ethernet
ONBOOT=yes
BOOTPROTO=static
NAME="ens33"
IPADDR=192.168.128.101
PREFIX=24
GATEWAY=192.168.128.2
DNS1=192.168.128.2

 在控制面版中找到查看网络状态和任务->更改适配器设置->找到VMnet8然后右键属性

如果找不到vmnet8可以参考

主机上没有虚拟机网络适配器VMnet8解决办法_主机没有vmnet8网卡-CSDN博客

双击图上蓝色的位置修改成以下

之后配置Linux虚拟机的虚拟网络编辑器,在虚拟机启动器那里左上角编辑(E)->虚拟网络编辑器

子网ip设定成192.168.128.0

下面的网关ip设定成和上面gateway设定的一样也就是192.168.128.2

确保Linux系统ifcfg-ens33文件中IP地址、虚拟网络编辑器地址和Windows系统VM8网络IP地址相同。

修改主机名称以下以slave1进行示范(每台虚拟机都要修改且确保配置的名称对应上ip)

vim /etc/hostname

修改主机映射文件hosts

vim /etc/hosts

在下面加入以下代码 

192.168.128.100 zhadoop100

192.168.128.101 zhadoop101

192.168.128.102 zhadoop102

192.168.128.103 zhadoop103

192.168.128.104 zhadoop104

192.168.128.105 zhadoop105

192.168.128.106 zhadoop106

192.168.128.107 zhadoop107

192.168.128.108 zhadoop108

重启虚拟机

reboot

到电脑路径C:\Windows\System32\drivers\etc

打开hosts文件并添加如下内容,然后保存

如果修改不了可以拖到桌面修改了再拖回去

192.168.128.100 zhadoop100

192.168.128.101 zhadoop101

192.168.128.102 zhadoop102

192.168.128.103 zhadoop103

192.168.128.104 zhadoop104

192.168.128.105 zhadoop105

192.168.128.106 zhadoop106

192.168.128.107 zhadoop107

192.168.128.108 zhadoop108

6.xhell配置 

名称可以按需求(随便)来起

主机需要确保对应你需要启动的虚拟机的ip地址又或者对应的hostname

这里是虚拟机按密码进入桌面那个用户

连不上就代表你ip地址没有对上,回去一步步检查

注意观察192.168.128.100的数字有没有对上

1、

vim /etc/sysconfig/network-scripts/ifcfg-ens33

的ip地址 

2、Linux虚拟机的虚拟网络编辑器的配置的ip

3、Windows系统适配器VMware Network Adapter VMnet8的IP地址

4、

 vim /etc/hostname

的hostname是否对应 

 5、

vim /etc/hosts

里映射文件是否对应

6、以及电脑里的C:\Windows\System32\drivers\etc下的host文件是否对应

7.jdk和hadoop包的解压

按1修改2路径

然后把需要的包从你的电脑拖到虚拟机里(也就是左拖到右) 

查看是否 复制成功

ls /opt/software/

然后解压包

tar -zxvf 包名 -C /opt/module/

配置jdk环境变量

sudo vim /etc/profile.d/my_env.sh

加入以下代码:wq保存退出 

#JAVA_HOME

export JAVA_HOME=/opt/module/jdk1.8.0_212

export PATH=$PATH:$JAVA_HOME/bin

source一下/etc/profile文件,让新的环境变量PATH生效 

source /etc/profile

查看是否解压成功 

java -version

cd到解压的hadoop包里

sudo vim /etc/profile.d/my_env.sh

加入以下代码:wq保存退出 

#HADOOP_HOME

export HADOOP_HOME=/opt/module/hadoop-2.6.4

export PATH=$PATH:$HADOOP_HOME/bin

export PATH=$PATH:$HADOOP_HOME/sbin

source /etc/profile
hadoop version

8.hadoop的本地运行

hadoop本地运行(单机,也就是在1台虚拟机中就可以做)进行hadoop演示

cd到解压的hadoop包

mkdir wcinput

cd wcinput

编辑word.txt文件 

vim word.txt

加入以下 (注意修改“用户名”为你配置了环境的用户名)

hadoop yarn

hadoop mapreduce

用户名

用户名

返回上一级的文件夹也就是hadoop包 

cd ..

执行程序 

hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.3.jar wordcount wcinput wcoutput

查看是否执行成功 

 cat wcoutput/part-r-00000

成功了会看到结果

用户名 2

hadoop  2

mapreduce       1

yarn    1

9.ssh无密登录配置

完成这个配置可以使之后虚拟机之间的互动不需要反复输入密码

首先随便选择1台虚拟机进行操作我选择slave2

连接slave3

ssh zhadoop103

出现让你确认是否连接的填yes然后回车再输入密码

接着退出

exit

上面的步骤是确保该虚拟机生成了.ssh文件夹

cd到.ssh生成公钥与私钥

 ssh-keygen -t rsa

接着按下三个回车生成两个文件id_rsa(私钥)、id_rsa.pub(公钥)

将公钥拷贝到需要免密登录的机器上

ssh-copy-id zhadoop100
ssh-copy-id zhadoop101
ssh-copy-id zhadoop102
ssh-copy-id zhadoop103

 生成公钥与私钥的步骤需要在master和slave1、2、3用户名账号都要分别对需要免密的账号进行操作

10.xsync集群分发脚本

把用户名用户的/opt/module/jdk1.8.0_212分发(拷贝)给hadoop103用户的/opt/moudle里 

scp -r /opt/module/jdk1.8.0_212  用户名@hadoop103:/opt/module

可以连接到另一个虚拟机进行删除操作

rm -rf wcinput

拷贝文件到slave3

rsync -av hadoop-3.1.3/ 用户名@hadoop103:/opt/module/hadoop-2.6.4/

xsync集群分发脚本配置

cd /home/用户名

mkdir bin

cd bin

vim xsync

添加以下的代码注意改for host in 的用户名名字 

#!/bin/bash

#1. 判断参数个数
if [ $# -lt 1 ]
then
    echo Not Enough Arguement!
    exit;
fi

#2. 遍历集群所有机器
for host in zhadoop101 zhadoop102 zhadoop103
do
    echo ====================  $host  ====================
    #3. 遍历所有目录,挨个发送

    for file in $@
    do
        #4. 判断文件是否存在
        if [ -e $file ]
            then
                #5. 获取父目录
                pdir=$(cd -P $(dirname $file); pwd)

                #6. 获取当前文件的名称
                fname=$(basename $file)
                ssh $host "mkdir -p $pdir"
                rsync -av $pdir/$fname $host:$pdir
            else
                echo $file does not exists!
        fi
    done
done

 修改执行权限

chmod +x xsync

测试脚本

xsync /home/用户名/bin

脚本复制到bin中 方便全局调用

sudo cp xsync /bin/

 同步环境变量

sudo ./bin/xsync /etc/profile.d/my_env.sh

在slave1和slave3里

source /etc/profile

一键ssh脚本配置

cd到bin

vim jpsall
#!/bin/bash

for host in zhadoop100 zhadoop101 zhadoop102 zhadoop103
do
        echo =============== $host ===============
        ssh $host jps 
done

修改权限 

chmod +x jpsall

测试 

jpsall

 一键启动hadoop集群脚本

vim myhadoop
#!/bin/bash

if [ $# -lt 1 ]
then
    echo "No Args Input..."
    exit ;
fi

case $1 in
"start")
        echo " =================== 启动 hadoop集群 ==================="

        echo " --------------- 启动 hdfs ---------------"
        ssh zhadoop100 "/opt/module/hadoop-2.6.4/sbin/start-dfs.sh"
        echo " --------------- 启动 yarn ---------------"
        ssh zhadoop100 "/opt/module/hadoop-2.6.4/sbin/start-yarn.sh"
        echo " --------------- 启动 historyserver ---------------"
        ssh zhadoop100 "/opt/module/hadoop-2.6.4/sbin/mr-jobhistory-daemon.sh start historyserver"
;;
"stop")
        echo " =================== 关闭 hadoop集群 ==================="

        echo " --------------- 关闭 historyserver ---------------"
        ssh zhadoop100 "/opt/module/hadoop-2.6.4/sbin/mr-jobhistory-daemon.sh stop historyserver"
        echo " --------------- 关闭 yarn ---------------"
        ssh zhadoop100 "/opt/module/hadoop-2.6.4/sbin/stop-yarn.sh"
        echo " --------------- 关闭 hdfs ---------------"
        ssh zhadoop100 "/opt/module/hadoop-2.6.4/sbin/stop-dfs.sh"
;;
*)
    echo "Input Args Error..."
;;
esac
chmod +x myhadoop

11.集群配置

配置核心文件 

cd $HADOOP_HOME/etc/hadoop

修改core-site.xml 

vim core-site.xml

<configuration>中加入 

<configuration>
	<property>
		<name>fs.defaultFS</name>
		<value>hdfs://zhadoop101:8020</value>
	</property>
        <property>
                <name>hadoop.tmp.dir</name>
                <value>/opt/module/hadoop-2.6.4/logs</value>
        </property>

</configuration>

修改hadoop-env.sh

vim hadoop-env.sh
export JAVA_HOME=/opt/module/jdk1.8.0_212

修改yarn-env.sh

vim yarn-env.sh
# export JAVA_HOME=/home/y/libexec/jdk1.6.0/
if [ "$JAVA_HOME" != "" ]; then
  #echo "run java in $JAVA_HOME"
  JAVA_HOME=/opt/module/jdk1.8.0_212

修改mapred-site.xml

vim mapred-site.xml
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<!--
  Licensed under the Apache License, Version 2.0 (the "License");
  you may not use this file except in compliance with the License.
  You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

  Unless required by applicable law or agreed to in writing, software
  distributed under the License is distributed on an "AS IS" BASIS,
  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  See the License for the specific language governing permissions and
  limitations under the License. See accompanying LICENSE file.
-->

<!-- Put site-specific property overrides in this file. -->

<configuration>
	<property>
		<name>mapreduce.framework.name</name>
		<value>yarn</value>
	</property>
        <property>
                <name>mapreduce.jobhistory.address</name>
                <value>zhadoop102:10020</value>
        </property>
        <property>
                <name>mapreduce.jobhistory.webapp.address</name>
                <value>zhadoop102:19888</value>
        </property>
</configuration>

修改yarn-site.xml

vim yarn-site.xml
<configuration>

<!-- Site specific YARN configuration properties -->
	<property>
		<name>yarn.resourcemanager.hostname</name>
		<value>zhadoop102</value>
	</property>
        <property>
                <name>yarn.resourcemanager.address</name>
                <value>${yarn.resourcemanager.hostname}:8032</value>
        </property>
        <property>
                <name>yarn.resourcemanager.scheduler.address</name>
                <value>${yarn.resourcemanager.hostname}:8030</value>
        </property>
        <property>
                <name>yarn.resourcemanager.webapp.address</name>
                <value>${yarn.resourcemanager.hostname}:8088</value>
        </property>
        <property>
                <name>yarn.resourcemanager.webapp.https.address</name>
                <value>${yarn.resourcemanager.hostname}:8090</value>
        </property>
        <property>
                <name>yarn.resourcemanager.resource-tracker.address</name>
                <value>${yarn.resourcemanager.hostname}:8031</value>
        </property>
        <property>
                <name>yarn.resourcemanager.admin.address</name>
                <value>${yarn.resourcemanager.hostname}:8033</value>
        </property>
        <property>
                <name>yarn.resourcemanager.local-dirs</name>
                <value>/opt/module/hadoop-2.6.4/data/hadoop/yarn/local</value>
        </property>
        <property>
                <name>yarn.log-aggregation-enable</name>
                <value>true</value>
        </property>
        <property>
                <name>yarn.nodemanager.remote-app-log-dir</name>
                <value>/opt/module/hadoop-2.6.4/data/tmp/logs</value>
        </property>
        <property>
                <name>yarn.log.server.url</name>
                <value>http://zhadoop102:19888/jobhistory/logs</value>
		<description>URL for job history server</description>
        </property>
        <property>
                <name>yarn.nodemanager.vmem-check-enabled</name>
                <value>false</value>
        </property>
        <property>
                <name>yarn.nodemanager.aux-services</name>
                <value>mapreduce_shuffle</value>
        </property>
        <property>
                <name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name>
                <value>org.apache.hadoop.mapred.ShuffleHandler</value>
        </property>
        <property>
                <name>yarn.nodemanager.resource.memory-mb</name>
                <value>2048</value>
        </property>
        <property>
                <name>yarn.scheduler.minimum-allocation-mb</name>
                <value>512</value>
        </property>
        <property>
                <name>yarn.scheduler.maximum-allocation-mb</name>
                <value>4096</value>
        </property>
        <property>
                <name>mapreduce.map.memory.mb</name>
                <value>2048</value>
        </property>
        <property>
                <name>mapreduce.reduce.memory.mb</name>
                <value>2048</value>
        </property>
        <property>
                <name>yarn.nodemanager.resource.cpu-vcores</name>
                <value>1</value>
        </property>
</configuration>

 修改hdfs-site.xml

vim hdfs-site.xml
<configuration>
        <property>
                <name>dfs.namenode.name.dir</name>
                <value>file:///opt/module/hadoop-2.6.4/data/hadoop/hdfs/name</value>
        </property>
        <property>
                <name>dfs.datanode.data.dir</name>
                <value>file:///opt/module/hadoop-2.6.4/data/hadoop/hdfs/data</value>
        </property>
        <property>
                <name>dfs.namenode.secondary.http-address</name>
                <value>zhadoop103:50090</value>
        </property>
        <property>
                <name>dfs.replication</name>
                <value>3</value>
        </property>
</configuration>

修改hive-site.xml

vim hive-site.xml 
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
	<property>
	  <name>javax.jdo.option.ConnectionURL</name>
	  <value>jdbc:mysql://zhadoop101:3306/hive?createDatabaseIfNotExist=true</value>
	  <description>JDBC connect string for a JDBC metastore</description>
	</property>

	<property>
	  <name>javax.jdo.option.ConnectionDriverName</name>
	  <value>com.mysql.jdbc.Driver</value>
	  <description>Driver class name for a JDBC metastore</description>
	</property>
	<property>
	  <name>javax.jdo.PersistenceManagerFactoryClass</name>
	  <value>org.datanucleus.api.jdo.JDOPersistenceManagerFactory</value>
	</property>
        <property>
          <name>javax.jdo.option.NonTransactionalRead</name>
          <value>true</value>
        </property>
        <property>
          <name>javax.jdo.option.ConnectionUserName</name>
          <value>root</value>
        </property>
	<property>
	  <name>javax.jdo.option.ConnectionPassword</name>
	  <value>123456</value>
	  <description>password to use against metastore database</description>
	</property>

        <property>
          <name>javax.jdo.option.Multithreaded</name>
          <value>true</value>
        </property>
        <property>
          <name>datanucleus.connectionPoolingType</name>
          <value>BoneCP</value>
        </property>
        <property>
          <name>hive.metastore.warehouse.dir</name>
          <value>/user/hive/warehouse</value>
        </property>
        <property>
          <name>hive.server2.thrift.port</name>
          <value>10000</value>
        </property>
        <property>
          <name>hive.server2.thrift.bind.host</name>
          <value>zhadoop104</value>
        </property>
        <property>
          <name>hive.metastore.uris</name>
          <value>thrift://zadoop101:9083</value>
        </property>
        <property>
          <name>hive.hwi.listen.host</name>
          <value>0.0.0.0</value>
        </property>
        <property>
          <name>hive.hwi.listen.port</name>
          <value>9999</value>
        </property>
        <property>
          <name>hive.hwi.war.file</name>
          <value>lib/hive-hwi-1.2.1.war</value>
        </property>
</configuration>

 集群分发

xsync /opt/module/hadoop-2.6.4/etc/hadoop

到被分发的机上验证

cat /opt/module/hadoop-2.6.4/etc/hadoop/core-site.xml

配置workers

vim /opt/module/hadoop-2.6.4/etc/hadoop/slaves

分发配置

 xsync /opt/module/hadoop-2.6.4/etc

12.启动集群

如果集群是第一次启动需要在zhadoop102格式化namenode,格式化NameNode,会产生新的集群id,导致NameNode和DataNode的集群id不一致,集群找不到已往数据。如果集群在运行过程中报错,需要重新格式化NameNode的话,一定要先停止namenode和datanode进程,并且要删除所有机器的data和logs目录,然后再进行格式化。

hdfs namenode -format

在启动hdfs(我是配置在zhadoop101)

hadoop目录下

sbin/start-dfs.sh

102下启动yarn

sbin/start-yarn.sh

jps查看所有的集群是否正常启动
上传小文件到集群

集群中创建文件夹

hadoop fs -mkdir /input

上传文件

 hadoop fs -put 文件路径以及文件名

cd到上面配置的文件存储地方可以看到有文件存储进去了

下载文件

hadoop fs -get /路径及文件名 下载到的路径

13、常用脚本

hadoop集群启停脚本

cd /home/用户名/bin
vim myhadoop.sh

注意先修改下面应该修改的名字(也就是hadoop名)再粘贴 

#!/bin/bash

if [ $# -lt 1 ]
then
    echo "No Args Input..."
    exit ;
fi

case $1 in
"start")
        echo " =================== 启动 hadoop集群 ==================="

        echo " --------------- 启动 hdfs ---------------"
        ssh hadoop102 "/opt/module/hadoop-3.1.3/sbin/start-dfs.sh"
        echo " --------------- 启动 yarn ---------------"
        ssh hadoop103 "/opt/module/hadoop-3.1.3/sbin/start-yarn.sh"
        echo " --------------- 启动 historyserver ---------------"
        ssh hadoop102 "/opt/module/hadoop-3.1.3/bin/mapred --daemon start historyserver"
;;
"stop")
        echo " =================== 关闭 hadoop集群 ==================="

        echo " --------------- 关闭 historyserver ---------------"
        ssh hadoop102 "/opt/module/hadoop-3.1.3/bin/mapred --daemon stop historyserver"
        echo " --------------- 关闭 yarn ---------------"
        ssh hadoop103 "/opt/module/hadoop-3.1.3/sbin/stop-yarn.sh"
        echo " --------------- 关闭 hdfs ---------------"
        ssh hadoop102 "/opt/module/hadoop-3.1.3/sbin/stop-dfs.sh"
;;
*)
    echo "Input Args Error..."
;;
esac

增加权限

chmod +x myhadoop.sh

2、查看三台服务器的脚本

cd /home/用户名/bin
vim jpsall
#!/bin/bash

for host in hadoop102 hadoop103 hadoop104
do
        echo =============== $host ===============
        ssh $host jps 
done
chmod +x jpsall

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值