最近自己在五台Linux服务器上成功配置了Hadoop和HIVE。Hadoop集群需要一个机器作为Master节点,其余的机器都是slave节点(Master节点同时也可以p配置成slave节点)。HIVE只需在Master节点中配置和使用即可。
1 配置Hadoop
Hadoop的配置比较简单,因为Hadoop不用安装。下面详细讲一下安装与配置步骤。以配置Hadoop 1.9.2版本为例。
(1)从hadoop官网上下载hadoop-0.19.2.tar.gz文件,并解压产生hadoop-0.19.2目录,将该目录到/search/hadoop目录下(如果你建立在了其它目录中,注意后面要相应的修改配置项)。
输入命令建立软连接$$ ln -s hadoop-1.9.2 hadoop (这样做的好处是如果改用其它版本的hadoop,不用重新配置)
(2)Hadoop和Hive都需要机器名。用hostname命令修改本机的机器名,例如修改10.10.60.139的机器名为hadoop需要键入 $$ hostname hadoop1
修改/etc/hosts文件,添加Hadoop所有集群中的机器名。Master和所有slave节点一定都要添加,否则会出问题。例如在我的所有hadoop机器的/etc/hosts文件都添加
10.10.60.139 hadoop1 10.10.60.140 hadoop2 10.10.63.32 hadoop3 10.10.65.48 hadoop4 10.10.67.36 hadoop5 |
(3) 由于Master机器需要ssh登录所有slave节点,因此所有机器都需要如下配置。在本文中Hadoop1是Master节点。
打开/etc/ssh/sshd_config文件,确保ssh使用的不是ssh2协议,否则将所有的Protocol 2修改成Protocol 1。如果修改了该文件,用service sshd restart命令重启一下ssh服务。
键入以下命令
$$ cd ~/.ssh/
$$ ssh-keygen -t rsa1 -C "hadoop_1" -f /root/.ssh/identity
$$ cat identity.pub >> authorized_keys
这时本机的公钥文件被存到了authorized_keys文件。这时ssh localhost命令应该可以不需要输入密码就自动登录本机(如果ssh 本机IP成功,但ssh localhost失败,则可以打开/etc/hosts.allow文件并添加127.0.0.1)。
为了保证master不需要密码直接ssh到slave节点,所有slave机器要rsync下来master机器的/root/.ssh/identity.pub文件,并cat到本机的/root/.ssh/authorized_keys文件。这时在master节点上用ssh+IP不输入密码直接可以登录slave机器。
(4) 修改环境变量
打开/etc/profile文件,在最后添加
export $HADOOP_HOME=/search/hadoop/hadoop
export PATH=$HADOOP_HOME/bin:$PATH
关闭,并运行$$ source /etc/profile命令,则环境变量生效。
(5) 修改$HADOOP_HOME/conf/hadoop-env.sh配置文件的两个配置
export JAVA_HOME=配置本机jdk或者jre的路径(如果没有jdk,可以yum install java-1.6.0-openjdk-devel,注意必须是java1.6版本以上,否则hadoop无法正常运行)
#这里设定hadoop占用2G内存,可以根据机器配置来改
export HADOOP_HEAPSIZE=2000
(6) 修改$HADOOP_HOME/conf/hadoop-site.xml文件如下,注意fs.default.name和mapred.job.tracker配置项必须用master节点的机器名而不能IP。否则运行HIVE时会遇到错误。
(7)修改所有机器的$HADOOP_HOME/conf/masters机器,指定了Master节点的IP;
修改所有机器的$HADOOP_HOME/conf/slaves机器,每行指定一个集群中slave节点的IP;
slaves文件示例如下
10.10.60.139 10.10.60.140 10.10.63.32 10.10.65.48 10.10.67.36 |
(8)所有机器运行$$ hadoop namenode -format 命令格式化namenode
(9) 在Master节点运行$HADOOP_HOME/bin/start-all.sh 启动hadoop。注意slave机器不用输入该命令。
在shell中输入jps命令,查看启动的hadoop进程。例如
11304 DataNode 15763 Jps 11190 NameNode 11516 JobTracker 11636 TaskTracker 11437 SecondaryNameNode |
注意Master节点中必须包括NameNode、SecondaryNameNode和JobTracker进程,slave机器必须包括DataNode和TaskTracker进程才算启动成功。
补充:如果要停止,运行$HADOOP_HOME/bin/stop-all.sh
Hadoop查询接口
http://master机器IP:50070/dfshealth.jsp
http://master机器IP:50030/jobtracker.jsp
Hadoop常用命令
Hadoop dfs –ls就是查看/usr/root目录下的内容,默认如果不填路径这就是当前用户路径;
Hadoop dfs –rmr xxx就是删除目录,还有很多命令看看就很容易上手;
Hadoop dfsadmin –report这个命令可以全局的查看DataNode的情况;
Hadoop job后面增加参数是对于当前运行的Job的操作,例如list,kill等;
Hadoop balancer就是前面提到的均衡磁盘负载的命令。
2 HIVE配置
HIVE也是基于hadoop分布式计算平台上的提供data warehouse的sql功能的一套软件。使得存储在hadoop里面的海量数据的汇总,即席查询简单化。hive提供了一套QL的查询语言,以sql为基础,使用起来很方便。Hadoop目录下实际上已经自带HIVE,但版本比较低,不推荐使用。HIVE只需配置在Master节点,步骤如下
(1) 从官网下载hive-0.5.0-bin.tar.gz并解压缩产生hive-0.5.0-bin文件夹。在$HADOOP_HOME/目录下建立名叫hive的软链接。
(2) 在/etc/profile增加环境变量
export HIVE_HOME=$HADOOP_HOME/hive
export PATH=$HIVE_HOME/bin:$PATH
(3) 运行如下命令
$$ $HADOOP_HOME/bin/hadoop fs -mkdir /tmp
$$ $HADOOP_HOME/bin/hadoop fs -mkdir /user/hive/warehouse
$$ $HADOOP_HOME/bin/hadoop fs -chmod g+w /tmp
$$ $HADOOP_HOME/bin/hadoop fs -chmod g+w /user/hive/warehouse
(4) 这时已经可以通过命令行(CLI)使用HIVE了。但是这种方式只支持单用户,多用来测试。在实际应用中,往往要将HIVE的元数据(schemal)存入Mysql中。这样就可以支持多用户了。
因此需要修改$HIVE_HOME/conf/hive-default.xml配置文件
配置项 |
值 |
javax.jdo.option.ConnectionURL |
jdbc:mysql:///?createDatabaseIfNotExist=true |
javax.jdo.option.ConnectionDriverName |
com.mysql.jdbc.Driver |
javax.jdo.option.ConnectionUserName |
|
javax.jdo.option.ConnectionPassword |
|
(参考文章http://www.mazsoft.com/blog/post/2010/02/01/Setting-up-HadoopHive-to-use-MySQL-as-metastore.aspx)
(5)从网上下载mysql-connector-java-5.1.11-bin.jar文件,并放到$HIVE_HOME/lib目录下,这时HIVE已经全部配置完了。