hadoop2.7.2集群安装

 

1、下载

Centos7

Jdk-1.7 or 1.8

hadoop-2.7.2.tar.gz

2、准备

主机规划

家庭IP

 

主机名

用户

作用

192.168.1.113

 

cancer01

hadoop

master

192.168.1.115

 

cancer02

hadoop

slave01

192.168.1.119

 

cancer03

hadoop

slave02

添加用户、组,在每台机器上

useradd   hadoop

passwd  hadoop

设置主机名,在每台机器上

vim /etc/sysconfig/network

vim /etc/hosts

hostnamectl set-hostname cancer01

hostnamectl set-hostname cancer02

hostnamectl set-hostname cancer03

 

每台机器增加host

192.168.1.113   cancer01

192.168.1.115   cancer02

192.168.1.119   cancer03

 

每台机器均关闭防火墙

systemctl stop firewalld.service              centos7停止firewall

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

 

每台机器均禁用Transparent Hugepage

查看状态

cat /sys/kernel/mm/transparent_hugepage/enabled

返回结果

[always] madvise never  

永久关闭

vim /etc/rc.local

if test -f/sys/kernel/mm/transparent_hugepage/enabled; then

  echo never > /sys/kernel/mm/transparent_hugepage/enabled

fi 

if test -f/sys/kernel/mm/transparent_hugepage/defrag; then

  echo never > /sys/kernel/mm/transparent_hugepage/defrag

fi

或者直接运行下面命令:

echo never >/sys/kernel/mm/transparent_hugepage/enabled

echo never >/sys/kernel/mm/transparent_hugepage/defrag

重启机器

查看状态

cat /sys/kernel/mm/transparent_hugepage/enabled 

返回结果

always madvise [never]

 

给hadoop用户授权sudo,在每台机器上

vim /etc/sudoers

hadoop ALL=(ALL)       ALL

 

3、配置ssh

打通01到01,02,03的SSH无密码登陆

修改sshd配置,每台机器上

vim /etc/ssh/sshd_config

放开2行注释

RSAAuthentication yes

PubkeyAuthentication yes

AuthorizedKeysFile      .ssh/authorized_keys

切换用户

su hadoop

查看是否安装ssh

rpm -qa | grep ssh

可以通过以下命令安装ssh:

apt-get install openssh-server

yum install ssh

在01机器上进入hadoop用户目录,使用命令生成公钥和私钥(连续回车,不设置密码)

ssh-keygen -t rsa

在01机器上把公钥文件复制到其他要访问的机器的hadoop用户目录下.ssh目录

scp ~/.ssh/id_rsa.pub hadoop@cancer01:/home/hadoop/.ssh/authorized_keys

scp ~/.ssh/id_rsa.pub hadoop@cancer02:/home/hadoop/.ssh/authorized_keys

scp ~/.ssh/id_rsa.pub hadoop@cancer03:/home/hadoop/.ssh/authorized_keys

访问授权,每台机器上

chmod 600authorized_keys

在01机器上检测是否可以不需要密码登陆

ssh localhost

ssh hadoop@cancer01

ssh hadoop@cancer02

ssh hadoop@cancer03

需要打通01机器到其他剩余节点的免密码登陆。

 

4、安装jdk,在每台机器上

下载jdk-8u101-linux-x64.rpm,使用rz命令上传。

1、安装前,最好先删除Linux自带的OpenJDK:

(1)运行java -version,会发现Linux自带的OpenJDK,运行rpm-qa | grep jdk,找出自带的OpenJDK名称;

(2)运行rpm -e --nodeps OpenJDK名称,删除OpenJDK;

2、下载jdk-8u20-linux-x64.rpm,运行rpm -ivh jdk-8u20-linux-x64.rpm

3、运行vim/etc/profile,在文件末尾输入以下几行:

export JAVA_HOME=/usr/java/jdk1.8.0_101

export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar

export PATH=$PATH:$JAVA_HOME/bin

4、运行source/etc/profile,使文件生效;

5、运行java -version,查看返回结果。

 

或yum安装

wget http://download.oracle.com/otn-pub/java/jdk/8u72-b15/jdk-8u72-linux-x64.rpm?AuthParam=1453706601_fb0540fefe22922be611d401fbbf4d75

通过yum 进行安装

yum localinstall jdk-8u72-linux-x64.rpm

设置JAVA_HOME环境变量

vim /etc/profile

export JAVA_HOME=/usr/java/jdk1.8.0_101

 

5、安装hadoop

只在01机器上下载hadoop,进行配置后复制到其他节点。

下载hadoop-2.7.2.tar.gz

wget http://apache.fayea.com/hadoop/common/hadoop-2.7.2/hadoop-2.7.2.tar.gz

移动hadoop-2.7.2到/usr/local目录下,

cd /usr/local

tar -xvf hadoop-2.7.2.tar.gz

chown -R hadoop:hadoop ./hadoop-2.7.2  (在每台机器上都要做)

ln -s /usr/local/hadoop-2.7.2  /usr/local/hadoop    (在每台机器上都要做)

判断hadoop的版本

/usr/local/hadoop/bin/hadoop version

配置环境变量,(在每台机器上都要做)

vim /etc/profile

exportPATH=$PATH:/usr/local/hadoop/bin:/usr/local/hadoop/sbin

在01本地文件系统创建以下文件夹:

mkdir /home/hadoop/name

mkdir /home/hadoop/data

mkdir /home/hadoop/temp

 

6、配置hadoop

涉及到的配置文件有7个:

/usr/local/hadoop/etc/hadoop/hadoop-env.sh

/usr/local/hadoop/etc/hadoop/yarn-env.sh

/usr/local/hadoop/etc/hadoop/slaves

/usr/local/hadoop/etc/hadoop/core-site.xml

/usr/local/hadoop/etc/hadoop/hdfs-site.xml

/usr/local/hadoop/etc/hadoop/mapred-site.xml

/usr/local/hadoop/etc/hadoop/yarn-site.xml

 

修改配置(如果系统已经设置了JAVA_HOME,也要配置env.sh)

在01机器上进入/usr/local/hadoop/etc/hadoop

配置文件1:hadoop-env.sh

修改JAVA_HOME值

export JAVA_HOME=/usr/java/jdk1.8.0_101

配置文件2:yarn-env.sh

修改JAVA_HOME值

export JAVA_HOME=/usr/java/jdk1.8.0_101

配置文件3:slaves (这个文件里面保存所有slave节点)

    cancer02

    cancer03

配置文件4:core-site.xml

   <configuration> 

           <property> 

                   <name>fs.defaultFS</name> 

                    <value>hdfs://cancer01:9000</value> 

           </property> 

           <property> 

                   <name>hadoop.tmp.dir</name> 

                   <value>file:/home/hadoop/temp</value> 

                    <description>Abasefor other temporary directories.</description> 

           </property> 

   </configuration> 

配置文件5:hdfs-site.xml

   <configuration> 

            <property> 

                   <name>dfs.namenode.secondary.http-address</name> 

                   <value>cancer01:9001</value> 

            </property> 

            <property> 

                    <name>dfs.namenode.name.dir</name> 

                    <value>file:/home/hadoop/name</value> 

             </property> 

            <property> 

                    <name>dfs.datanode.data.dir</name> 

                    <value>file:/home/hadoop/data</value> 

            </property> 

            <property> 

                     <name>dfs.replication</name> 

                    <value>3</value> 

            </property> 

            <property> 

                    <name>dfs.webhdfs.enabled</name> 

                    <value>true</value> 

            </property> 

   </configuration> 

配置文件6:mapred-site.xml

   <configuration> 

            <property> 

                           <name>mapreduce.framework.name</name> 

                           <value>yarn</value> 

</property> 

<property> 

                           <name>mapreduce.jobhistory.address</name> 

                           <value>cancer01:10020</value> 

</property> 

<property> 

                           <name>mapreduce.jobhistory.webapp.address</name> 

                           <value>cancer01:19888</value> 

</property> 

   </configuration> 

配置文件7:yarn-site.xml

   <configuration> 

           <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>-->

                  <value>mapreduce_shuffle</value>

           </property>

           <property> 

                  <name>yarn.resourcemanager.address</name> 

                   <value>cancer01:8032</value> 

          </property> 

          <property> 

                  <name>yarn.resourcemanager.scheduler.address</name> 

                   <value>cancer01:8030</value> 

          </property> 

          <property> 

                  <name>yarn.resourcemanager.resource-tracker.address</name> 

                   <value>cancer01:8031</value> 

          </property> 

          <property> 

                   <name>yarn.resourcemanager.admin.address</name> 

                   <value>cancer01:8033</value> 

          </property> 

          <property> 

                  <name>yarn.resourcemanager.webapp.address</name> 

                   <value>cancer01:8088</value> 

          </property> 

</configuration>

 

复制hadoop到到其他节点

scp -r /usr/local/hadoophadoop@cancer02:/usr/local/hadoop-2.7.2

scp -r /usr/local/hadoop hadoop@cancer03:/usr/local/hadoop-2.7.2

 

7、启动hadoop

进入01机器安装目录:

cd /usr/local/hadoop

格式化namenode:

./bin/hdfs namenode -format

返回“successfully formatted”、“Exitting with status 0″,成功。返回“Exitting withstatus 1″,出错。

启动hdfs:

./sbin/start-dfs.sh

启动yarn:

./sbin/start-yarn.sh

查看运行进程

jps

cancer01上运行的进程有:NameNode  SecondaryNameNode ResourceManager

cancer02和cancer03上运行的进程有:DataNode NodeManager

 

关闭hdfs:

./sbin/stop-dfs.sh

关闭yarn:

./sbin/stop-yarn.sh

 

8、测试hadoop

查看集群状态:

./bin/hdfs dfsadmin -report

返回:Live datanodes (2):。表示集群建立成功。

查看NameNode和Datanode信息

http://cancer01:50070

通过Web界面查看任务的运行情况:

http://cancer01:8088/cluster

命令详解,官方文档

https://hadoop.apache.org/docs/r1.0.4/cn/

 

9、安装ambari

官方安装文档 2.2.0

https://cwiki.apache.org/confluence/display/AMBARI/Install+Ambari+2.2.0+from+Public+Repositories

更新 yum的仓库

yum update

cd /etc/yum.repos.d/

wget http://public-repo-1.hortonworks.com/ambari/centos7/2.x/updates/2.2.0.0/ambari.repo

安装自己的jdk 环境

yum localinstall jdk-8u72-linux-x64.rpm

配置JAVA_HOME环境变量

vim /etc/profile

exportJAVA_HOME="/usr/java/default"

安装 Ambari

yum install ambari-server

ambari-server setup

(在配置的过程中选择自己安装的jdk环境)

启动服务

ambari-server start

访问服务

http://192.168.1.150:8080 (缺省用户名和密码 是 : admin/admin)

 

11、准备调试环境

win7中,解压hadoop-2.7.2,到C:\princetechs\servers\hadoop-2.7.2  (以下用$HADOOP_HOME表示)

win7中添加几个环境变量

HADOOP_HOME=C:\princetechs\servers\hadoop-2.7.2

HADOOP_BIN_PATH=%HADOOP_HOME%\bin

HADOOP_PREFIX=C:\princetechs\servers\hadoop-2.7.2

另外,PATH变量在最后追加;%HADOOP_HOME%\bin

 

12、编译eclipse plugin

下载地址:https://github.com/winghc/hadoop2x-eclipse-plugin

修改hadoop2x-eclipse-plugin-2.6.0\ivy下的libraries.properties

1)cd到hadoop2x-eclipse-plugin-master所在目录

2)执行ant jar

在命令行中执行如下命令:

ant jar -Dversion=2.6.0 -Declipse.home=[这里填你的eclipse目录路径]-Dhadoop.home=[这里填你的hadoop目录路径]

如下图所示:

在编译过程中,可能遇到说jar包不存在的问题。可以直接从网上下相对应的jar包,或者直接去hadoop-2.7.2/share/hadoop/common/lib目录中,该目录中应该有相对应的jar包,只不过版本不对,我是直接把jar包名字改成了ant所需的jar包名。

 

13、配置eclipse plugin

下载windows64位平台的hadoop2.6插件包(hadoop.dll,winutils.exe)

在hadoop2.7.2源码的hadoop-common-project\hadoop-common\src\main\winutils下,有一个vs.net工程,编译这个工程可以得到这一堆文件,输出的文件中,hadoop.dll、winutils.exe 这二个最有用,将winutils.exe复制到$HADOOP_HOME\bin目录,将hadoop.dll复制到%windir%\system32目录 (主要是防止插件报各种莫名错误,比如空对象引用啥的)。

 

编译hadoop-eclipse-plugin插件

1)将jar包放入eclipse文件夹

将刚刚编译好的hadoop-eclipse-plugin-2.6.0.jar复制到eclipse目录中的plugins文件夹。之后重启Eclipse,然后就可以看到如下图所示的内容:

如图中左侧红色框圈中的部分所示,如果插件安装成功,会出现DFSLocations。

 

2)添加Hadoop installation directory

打开Windows -> Preferens,可以看到Hadoop Map/Reduce选项,点击该选项,然后将hadoop-2.7.2文件夹添加进来。如图所示:

 

3)配置Map/ReduceLocations

点击Window -> Show View -> Other-> MapReduce Tools -> Map/Reduce Locations,然后点击OK。

之后点击新出现的Map/Reduce Locations选项卡,点击右侧小象按钮,如图所示:

点击后会弹出New Hadoop Location窗口。如下图所示,填写红框圈中的内容。

左侧9001那部分的内容,是与你hdfs-site.xml中的dfs.namenode.secondary.http-address中的value一致。具体该配置文件的内容见我上一篇文章。右侧9000那块的内容,是与你core-site.xml中的fs.defaultFS的value一致。

Location name 这里就是起个名字,随便起

Map/Reduce(V2) Master Host 这里就是虚拟机里hadoop master对应的IP地址,下面的端口对应 hdfs-site.xml里dfs.datanode.ipc.address属性所指定的端口

DFS Master Port: 这里的端口,对应core-site.xml里fs.defaultFS所指定的端口

最后的user name要跟虚拟机里运行hadoop的用户名一致,我是用hadoop身份安装运行hadoop2.7.2的,所以这里填写hadoop,如果你是用root安装的,相应的改成root

这些参数指定好以后,点击Finish,eclipse就知道如何去连接hadoop了,一切顺利的话,在Project Explorer面板中,就能看到hdfs里的目录和文件了

可以在文件上右击,选择删除试下,通常第一次是不成功的,会提示一堆东西,大意是权限不足之类,原因是当前的win7登录用户不是虚拟机里hadoop的运行用户,解决办法有很多,比如你可以在win7上新建一个hadoop的管理员用户,然后切换成hadoop登录win7,再使用eclipse开发,但是这样太烦,最简单的办法:

hdfs-site.xml里添加

<property>

    <name>dfs.permissions</name>

    <value>false</value>

</property>

然后在虚拟机里,运行hadoop dfsadmin -safemodeleave

保险起见,再来一个 hadoop fs -chmod 777 /

总而言之,就是彻底把hadoop的安全检测关掉(学习阶段不需要这些,正式生产上时,不要这么干),最后重启hadoop,再到eclipse里,重复刚才的删除文件操作试下,应该可以了。

 

若点击小象按钮后,没弹出该窗口,则点击Window -> ShowView -> Other -> General -> Error Log,打开ErrorLog窗口,看看里面有没有什么错误提示。如果有提示说NoClassDefFoundError的错误,则需要找到对应的jar包,然后将其放入之前编译的hadoop-eclipse-plugin-2.6.0.jar的lib目录中。打开jar包中META-INF目录中的MANIFEST.MF文件,在Bundle-ClassPath中添加该jar包的信息,如下图所示:

 

14、运行wordcount

新建一个项目,选择Map/Reduce Project

后面的Next就行了,然后放一上WodCount.java,代码如下:

package yjmyzz;

 

import java.io.IOException;

import java.util.StringTokenizer;

import org.apache.hadoop.conf.Configuration;

import org.apache.hadoop.fs.Path;

import org.apache.hadoop.io.IntWritable;

import org.apache.hadoop.io.Text;

import org.apache.hadoop.mapreduce.Job;

import org.apache.hadoop.mapreduce.Mapper;

import org.apache.hadoop.mapreduce.Reducer;

importorg.apache.hadoop.mapreduce.lib.input.FileInputFormat;

importorg.apache.hadoop.mapreduce.lib.output.FileOutputFormat;

import org.apache.hadoop.util.GenericOptionsParser;

 

public class WordCount {

    publicstatic class TokenizerMapper extends Mapper<Object, Text, Text,IntWritable> {

        privatefinal static IntWritable one = new IntWritable(1);

        privateText word = new Text();

       

        publicvoid map(Object key, Text value, Context context) throws IOException,InterruptedException {

           StringTokenizer itr = new StringTokenizer(value.toString());

           while (itr.hasMoreTokens()) {

               word.set(itr.nextToken());

               context.write(word, one);

            }

        }

    }

   

    publicstatic class IntSumReducer extends Reducer<Text, IntWritable, Text,IntWritable> {

        privateIntWritable result = new IntWritable();

        public void reduce(Text key,Iterable<IntWritable> values, Context context) throws IOException,InterruptedException {

            intsum = 0;

            for(IntWritable val : values)

               sum += val.get();

           result.set(sum);

            context.write(key, result);

        }

    }

   

    publicstatic void main(String[] args) throws Exception {

       Configuration conf = new Configuration();       

        String[]otherArgs = new GenericOptionsParser(conf, args).getRemainingArgs();

        if(otherArgs.length < 2) {

           System.err.println("Usage: wordcount <in> [<in>...]<out>");

           System.exit(2);

        }

        Job job= Job.getInstance(conf, "word count");

       job.setJarByClass(WordCount.class);

       job.setMapperClass(TokenizerMapper.class);

       job.setCombinerClass(IntSumReducer.class);

       job.setReducerClass(IntSumReducer.class);

       job.setOutputKeyClass(Text.class);

       job.setOutputValueClass(IntWritable.class);

        for (inti = 0; i < otherArgs.length - 1; ++i)

           FileInputFormat.addInputPath(job, new Path(otherArgs[i]));

       FileOutputFormat.setOutputPath(job,

               new Path(otherArgs[otherArgs.length - 1]));

       System.exit(job.waitForCompletion(true) ? 0 : 1);

    }

}

 

然后再放一个log4j.properties,内容如下:(为了方便运行起来后,查看各种输出)

log4j.rootLogger=INFO, stdout

#log4j.logger.org.springframework=INFO

#log4j.logger.org.apache.activemq=INFO

#log4j.logger.org.apache.activemq.spring=WARN

#log4j.logger.org.apache.activemq.store.journal=INFO

#log4j.logger.org.activeio.journal=INFO

log4j.appender.stdout=org.apache.log4j.ConsoleAppender

log4j.appender.stdout.layout=org.apache.log4j.PatternLayout

log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE}| %-5.5p | %-16.16t | %-32.32c{1} | %-32.32C %4L | %m%n

 

最终的目录结构如下:

然后可以Run了,当然是不会成功的,因为没给WordCount输入参数,参考下图:

1.5 设置运行参数

因为WordCount是输入一个文件用于统计单词字,然后输出到另一个文件夹下,所以给二个参数,参考上图,在Program arguments里,输入

hdfs://172.28.20.xxx:9000/jimmy/input/README.txt
hdfs://172.28.20.xxx:9000/jimmy/output/

大家参考这个改一下(主要是把IP换成自己虚拟机里的IP),注意的是,如果input/READM.txt文件没有,请先手动上传,然后/output/ 必须是不存在的,否则程序运行到最后,发现目标目录存在,也会报错,这个弄完后,可以在适当的位置打个断点,终于可以调试了:

 

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值