你好,游客 登录 注册 搜索
背景:
阅读新闻

Hadoop安装手记

[日期:2016-07-11] 来源:奔跑的兔子  作者: [字体: ]

写在前面:本文中的安装环境是Mac,仅仅是为了学习了解,所以以快速把系统跑起来为目的,参数尽可能用默认配置。另外本文写作时间跨度较长,中间有相当时间的间隔,所以会出现不同版本的hadoop。

设置SSH

单节点运行hadoop需要本机ssh连通。生成key的过程没什么特殊的:

ssh-keygen -t rsa
cat .ssh/id_rsa.pub >>.ssh/authorized_keys

然后需要开启ssh服务,具体设置在“系统偏好设置->共享->远程登录”,把这个勾上即可。

如果发现配置之后不生效,多半是权限问题,可以检查一下 authorized_keys 是不是权限是600,另外家目录(比如对我的环境来讲就是 /Users/sunyi )的权限是不是755。

环境变量

首先保证安装了java7,然后到官网下载hadoop,解压(方便起见就不新开用户了,直接放到当前用户目录下)。接下来就需要做些环境变量设置。

首先在/etc/bashrc文件中增加如下设置:

export HADOOP_HOME=/Users/sunyi/hadoop-2.3.0
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin

这样就能直接访问hadoop shell了,可以用如下命令做个测试:

hadoop version

然后在 hadoop-env.sh / mapred-env.sh / yarn-env.sh 里面设一下java环境变量:

export JAVA_HOME=`/usr/libexec/java_home`

Hadoop配置项

这里就直接罗列一下配置项了。

core-site.xml

<configuration>  
   <property>  
     <name>fs.default.name</name>  
       <value>hdfs://localhost:9000</value>  
   </property>  
 </configuration>

hdfs-site.xml

<configuration>  
   <property>  
     <name>dfs.replication</name>  
     <value>1</value>  
   </property>  
   <property>  
     <name>dfs.namenode.name.dir</name>  
     <value>file:/Users/sunyi/hdfs/namenode</value>  
   </property>  
   <property>  
     <name>dfs.datanode.data.dir</name>  
     <value>file:/Users/sunyi/hdfs/datanode</value>  
   </property>  
</configuration>

mapred-site.xml

<configuration>
<property>
     <name>mapreduce.framework.name</name>
     <value>yarn</value>
</property>
</configuration>

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>
</property> 
</configuration>

其中 hdfs-site.xml 注意提前建好相应的目录, yarn-site.xml 配置时注意不要用以前2.0版本时的配置,也就是不要用mapreduce.shuffle或者mapreduce-shuffle这样的写法,如果这样写的话,会出现启动后nodemanager启动失败,还有job运行失败等现象。

启动Hadoop

首先格式化hdfs,然后依次启动hdfs和yarn。

hadoop namenode -format
./sbin/start-dfs.sh
./sbin/start-yarn.sh

然后可以用jps确认下进程全部顺利启动,会看到下面这些进程,有问题就检查下log。

8431 ResourceManager
8525 NodeManager
9095 Jps
8313 SecondaryNameNode
8207 DataNode
8120 NameNode

成功启动后,就可以用浏览器看看 localhost:50070 和 localhost:8088 的hdfs和yarn管理页面了。

Job测试

找一个文本,传到hdfs上面,然后运行一下hadoop自带的wordcount job:

hadoop jar ./share/hadoop/mapreduce/hadoop-mapreduce-examples-*.jar wordcount input.txt out

或者运行一个不依赖hdfs数据的job也可以,比如pi计算:

hadoop jar ./share/hadoop/mapreduce/hadoop-mapreduce-examples-*.jar pi 10 100000

运行成功后yarn管理页如下图: 

在运行job或者是其他任何hadoop命令时,都会碰到下面两个warning:

  • Unable to load realm info from SCDynamicStore:这个是mac下特有的安全方面的问题警告,可以通过在 hadoop-env.sh 中增加如下配置消除。

    HADOOP_OPTS="${HADOOP_OPTS} -Djava.security.krb5.realm= 
    -Djava.security.krb5.kdc= -Djava.security.krb5.conf=/dev/null"
    
  • Unable to load native-hadoop library for your platform:这个警告的原因是hadoop自带的native lib是32位的,在64位的系统上自然是版本不一致。如果需要解决这个问题,需要自己编译一下,替换掉原来的lib即可,由于这里仅仅是学习用,就不做这件事情了。

MR History Server

为了开启MR的History Server,首先需要在 yarn-site.xml 里面配置log aggregation,并且指定log目录打开地址(如果不配置参数的话其实也能启动,但是在主界面上是打不开log内容的):

<property>
    <name>yarn.log.server.url</name>
    <value>http://localhost:19888/jobhistory/logs</value>
</property>

<property>
    <name>yarn.log-aggregation-enable</name>
    <value>true</value>
</property>

然后,运行如下命令即可启动:

./sbin/mr-jobhistory-daemon.sh start historyserver

现在,已完成的任务的Tracking URL将从App Master“移交给”History Server。另外在jobhistory的界面 localhost:19888 上也可以看到所有已经完成的任务:

另外,如果想从命令行来看日志,可以用yarn logs命令,比如典型的查看am的log,就是:

yarn logs -applicationId <APP_ID>

Spark on Yarn

Spark on Yarn的基本安装很简单。首先确保scala环境已经安装,这里就不再赘述了。下载spark后(这里用的是 spark-1.3-hadoop-2.4 ),在 conf/spark-env.sh 里面设置hadoop conf目录即可:

export HADOOP_CONF_DIR=/Users/sunyi/develop/hadoop-2.5.0-cdh5.3.0/etc/hadoop

然后就可以开始运行spark job,不需要像独立部署时启动master/worker之类的了:

./bin/spark-submit --class org.apache.spark.examples.SparkPi \
    --master yarn-cluster \
    --num-executors 4 \
    --driver-memory 1g \
    --executor-memory 1g \
    --executor-cores 1 \
    lib/spark-examples-*.jar \
    100

可以看到只需要指定master为yarn-cluster,并且给出一些运行参数即可。Spark的运行依赖spark-assembly和应用程序spark-examples会从本地上传。当然,可以用SPARK_JAR变量指定spark-assembly的位置,并且上传spark-assembly到hdfs:

export SPARK_JAR=hdfs://localhost:9000/spark-assembly-1.3.0-hadoop2.4.0.jar

Spark History Server

Spark同样有自己的History Server。配置方法是在conf目录下编辑 spark-default.conf ,加入如下3行:

spark.eventLog.enabled 		 true
spark.yarn.historyServer.address localhost:18080
spark.eventLog.dir               hdfs://localhost:9000/spark-log

这三行分别指定了开启日志记录,ui地址,以及日志目录(要提前建好目录)。然后就可以启动了:

./sbin/start-history-server.sh  hdfs://localhost:9000/spark-log

这样,刚才我们的spark pi任务在运行结束后就可以在 localhost:18080 界面上看到了:

Hadoop Timeline Server

Timeline Server是hadoop2.4新引入的一个功能。由于hadoop2开始支持各种计算框架,而目前各个框架自己都提供独立的history server机制,所以Timeline Server的主要意义在于将各个框架自己提供的history server统一集成到一个history server中,方便用户统一查询已完成的所有任务,主要功能分为两块:

  • 提供已完成任务的通用信息,包括任务名,队列等等,这个跟yarn主界面看到的类似。
  • 集中收集各个框架提供的任务信息,比如mapreduce的map数,reduce数,counter等等,以便进行统一查询。

其中第二个功能目前还不太完善,只提供API方式获取数据,这里就配置一下第一个功能。配置方法就是在 yarn-site.xml 中添加如下配置开启:

<property>
  <name>yarn.timeline-service.generic-application-history.enabled</name>
  <value>true</value>
</property>

<property>
  <name>yarn.timeline-service.generic-application-history.store-class</name>
  <value>org.apache.hadoop.yarn.server.applicationhistoryservice.
         FileSystemApplicationHistoryStore</value>
</property>

然后启动Timeline Server:

yarn historyserver

这样就可以打开默认界面 localhost:8188 ,所有之前运行的mr和spark任务都已经可以在界面上看到:





收藏 推荐 打印 | 录入:elainebo | 阅读:
本文评论   查看全部评论 (0)
表情: 表情 姓名: 字数
点评:
       
评论声明
  • 尊重网上道德,遵守中华人民共和国的各项有关法律法规
  • 承担一切因您的行为而直接或间接导致的民事或刑事法律责任
  • 本站管理人员有权保留或删除其管辖留言中的任意内容
  • 本站有权在网站内转载或引用您的评论
  • 参与本评论即表明您已经阅读并接受上述条款