Hadoop伪分布式环境以及开发环境搭建
-
Hadoop EcoSystem
-
环境准备
VMTools: WMware 10.0
OS:ubuntu 12.04LTS
Hadoop: hadoop-0.20.205.0
Hive: hive-0.9.0 -
Hadoop伪分布式安装
3.1 Hive与HADOOP协作关系图
3.2 Hadoop运行模式介绍
Hadoop集群有三种运行模式,分别为单机模式,伪分布模式,完全分布式模式。本书将重点介绍完全分布式模式下Hadoop的安装与配置。 -
单机模式
单机模式是Hadoop的默认模式。在该模式下无需运行任何守护进程,所有程序都在单个JVM上执行。该模式主要用于开发调试MapReduce程序的应用逻辑。 -
伪分布模式
在伪分布模式下,Hadoop守护进程运行在一台机器上,模拟一个小规模的集群。该模式在单机模式的基础上增加了代码调试功能,允许你检查NameNode,DataNode,JobTracker,TaskTracker等模拟节点的运行情况。 -
完全分布式模式
单机模式和伪分布模式均用于开发与调试的目的。真实Hadoop集群的运行采用的是全分布模式。
3.3 系统安装以及JDK配置
略.
2.3 Ubuntu下安装流程 -
新建用户用于Hadoop测试。
1) 添加用户hadoop
sudo addgroup hadoop
sudo adduser –ingroup hadoop hadoop
2) 为hadoop用户添加权限
打开/etc/sudoers文件
sudo gedit /etc/sudoers
给hadoop用户赋予root用户同样的权限 -
配置SSH
SSH用于集群中主从服务器之间执行指令时无需输入登陆密码。
安装单机以及伪分布模式可忽略此步。
- 安装SSH
sudo apt-get install openssh-server - 安装完成后,启动ssh服务,并验证服务进程是否启动
- 生成公私钥
ssh-****** –t rsa –P “”
完成后会在~/.ssh目录下生成两个文件:id_rsa和id_rsa.pub,前者为私钥,后者为公钥,然后将公钥id_rsa.pub添加到authorized_keys授权文件中
cat ~/.ssh/id_rsa.pub>> ~/.ssh/authorized_keys
然后使用ssh登录不用输入密码:
输入exit登出。
- 安装hadoop-0.20.205.0
- 解压安装包hadoop-0.20.205.0-bin.tar.gz
- 在/usr/local新建文件夹hadoop,并修改文件权限为hadoop用户所有
sudo mkdir hadoop
sudo chown –R hadoop:hadoop hadoop - 将安装文件移至hadoop目录
mv hadoop-0.20.205.0/* /usr/local/hadoop - 修改hostname
修改如下: - 添加环境变量
在.bashrc文件底部添加:
export JAVA_HOME=/usr/lib/java/jdk1.7.0_79
export JRE_HOME={JAVA_HOME}/lib:{JAVA_HOME}/bin:{HIVE_HOME}/bin:$PATH
输入env可查看环境是否添加成功,如果没有,注销用户再试。 - 单机模式安装完毕,可以运行hadoop自带的例子WordCount运行此过程
mkdir input
cp conf/* input
运行结束后
cat output/* 查看结果 - 伪分布模式需要做一些配置,设定*-site.xml
进入/usr/local/hadoop/conf目录,设定的文件包括core-site.xml, hdfs-site.xml, mapred-site.xml。
core-site.xml: Hadoop Core的配置项,例如HDFS和MapReduce常用的I/O设置等。
hdfs-site.xml: Hadoop 守护进程的配置项,包括namenode,辅助namenode和datanode等。
mapred-site.xml: MapReduce 守护进程的配置项,包括jobtracker和tasktracker。
core-site.xml:
fs.default.name为节点网络配置信息;
hadoop.tmp.dir用于缓存namenode格式化的信息
hdfs-site.xml:
dfs.name.dir为存放hdfs元数据结构,可设置多个,用于备份;
dfs.data.dir为存放hdfs中的数据,其他同上;
dfs.replication: 设置hdfs的副本数量。
mapred-site.xml:
mapred.job.tracker为设置master节点的jobtracker网路配置信息。
修改主从服务器中的配置信息:
8) 格式化HDFS
初次运行hadoop时一定要有此操作。格式化namenode, secondarynamenode, tasktracker
指令:
hadoop namenode –format
9) 启动Hadoop
通过jps命令查看进程是否启动成功:
以上信息表示启动成功。
10) 可重新运行wordcount例子,看下结果。
11) 所有的设置已完成,Hadoop也启动了,现在可以通过下面的操作来查看服务是否正常,在Hadoop中用于监控集群健康状态的Web界面:
http://hadoop:50030/ - Hadoop 管理介面
http:// hadoop:50060/ - Hadoop Task Tracker 状态
http:// hadoop:50070/ - Hadoop DFS 状态
12) 结束hadoop时,可通过stop-all.sh脚本关闭Hadoop的守护进程。
4. 安装hive-0.9.0
hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供简单的sql查询功能,并将sql语句转换为MapReduce任务进行运行。
- 解压hive-0.9.0-bin.tar.gz
- 在/usr/local目录下新建目录hive,并将hive安装文件移动至新建目录中
sudo mkdir hive
mv hive-0.9.0-bin/* /usr/local/hive - 设置目录权限以及环境变量,参见hadoop设置。
- 修改/hive/conf下面的模板文件:
cp hive-env.sh.template hive-env.sh
cp hive-default.xml.template hive-site.xml
hive-env.sh, 设置hadoop目录
Hive-site.xml, 配置hive元数据存放位置,metastore使用本地模式
hive.metastore.warehouse.dir:hive数据在hdfs文件系统中的存储目录;
hive.metastore.local:为true时,metastore为本地模式,metastore服务和hive服务在同一进程中运行;当为false时,metastore服务可配置为远程模式,此时,metastore服务和hive服务分开启动。
Java.jdo.option.ConnectionURL,
javax.jdo.option.ConnectionDriverName,
javax.jdo.option.ConnectionUserName,
javax.jdo.option.ConnectionPassword:四个配置项用于配置metastore元数据的存放位置,使用关系型数据库进行存放;例子中使用postgresql数据库,hive默认使用derby。
5) 启动hive, 并创建表test1
访问时,报目录访问权限错误,将hadoop的安全模式关闭
Hadoop dfsadmin –safemode leave
6) 验证表是否创建成功(两种方法)
- hadoop fs –ls /user/hive/warehouse
- http://localhost:50070/ 查看表对应的文件夹是否存在
- hive web界面访问方式
http://localhost:9999/hwi/ - 将数据导入hdfs-> load data local inpath ‘/home/hadoop/test.txt’ into table test1;
- Metastore服务远程配置
hive.metastore.uris:配置客户端访问后端服务的uri。
此时,hive分3个服务启动:
- hive –service metastore :启动hive元数据存储服务
- hive –service hiveserver:启动hive服务
- hive :启动客户端
3.Hadoop开发环境搭建
3.1 开发环境准备
OS: win 7
IDE: eclipse 4.4
Ant:apache-ant-1.9.6
Hadoop eclipse-plugin:手动编译生成
3.2 编译生成Hahoop的eclipse插件
Ant配置过程略。
插件编译基于hadoop-0.20.205.0.tar.gz源代码包。 - 将目录切换到/src/contrib./eclipse-plugin
- 打开build.xml
样例:
设定参数以及编译所需eclipse的jar包
hadoop.root: hadoop的根目录;
eclipse.name: eclipse的根目录,编译的插件和eciipse的版本有关系,不同版本的hadoop插件不能共用;
version: hadoop版本号。
编译插件代码:
编译成jar包:
3. 打开META-INF/MANIFEST.MF
添加jar包:
4. 然后使用ant生成jar包
编译成功后,会在/build/contrib/eclipse-plugin/生成jar包。
5. 将jar放到eclipse目录plugins下,重启eclipse。
3.3 Eclipse配置hadoop开发环境
- 打开”window”->”preferences”,选择”Hadoop Map/Reduce”页签
选择hadoop的安装目录 - 将eclipse切换到Map/Reduce风格。
可以看到: - 在Map/Reduce Locations右键点击New Hadoop Location:
在Map/Reduce Master下面的Host填写远程主机ip,端口号填写hadoop运行环境所配置的端口,DFS Master同理;
User name填写运行hadoop的用户名。
连接成功后,可以看到hdfs的目录,如图所示:
如果连接时,提示如下错误:
将报错的jar包中的class文件直接放在插件的classes目录里。
3.4 编写hadoop的MapReduce代码
- 新建一个MapReduce的项目
- 编写样例代码WordCount
样例代码参见hadoop-examples-0.20.205.0.jar - 然后运行项目即可,Run on Hadoop。运行前如果输出的目录存在,请先将其删除。运行结果如下:
- 运行时提示文件访问权限错误时(本地ubuntu环境不会出现此错误),将FileUtil.java从hadoop-core模块单独提出来
将checkReturnValue方法里面的代码注释掉,
然后重新运行即可。
4.MongoDB数据导入HDFS
MongoDB数据导入是使用hadoop的Map/Reduce方法进行导入。
4.1环境准备
Mongodb数据库:mongodb-win32-x86_64-2008plus-2.6.11
Mongodb数据导入HDFS的API : mongo-hadoop-0.20-1.2.0
Mongodb的Java驱动 :mongo-java-driver-2.8.0.jar
Mongodb客户端: rockmongo-on-windows
4.2 MongoDB数据准备
使用rockmongo准备数据,例如:
数据库以及表名为local.hadoop, 数据中只有一个字段key。
4.3 数据导入代码
- 将mongodb的java驱动以及mongo-hadoop中的jar放在hadoop根目录/lib/下,并在项目中buildpath中也添加如上的jar包。
- 导入代码如下:
编写map方法将mongodb中的数据取出来。
在main方法中,指明mongodb数据库地址,库以及表,以及数据输入输出的过滤类等。 - 执行完毕后,可以在output文件夹里面看到从mongodb中导出的数据。