您的位置:首页 > 运维架构

搭建Hadoop集群中遇到的坑

2015-12-11 11:01 501 查看
工作需要搭建个Hadoop集群,找了几台机器,配置如下:

IP角色
10.128.84.20ResourceManager
10.128.84.21NameNode &

SecondaryNameNode
10.128.84.22DataNode & NodeManager
10.128.84.24DataNode & NodeManager
10.128.84.25DataNode & NodeManager
10.128.84.27DataNode & NodeManager

Hadoop Core篇

然后网上找了一下教程,参考了这篇博客hadoop 2.6全分布安装

其中有几点需要注意:

测试dfs的时候是在NameNode所在的节点运行dfs-start.sh,因为我的环境是ResourceManager和NameNode节点分开的,我开始没注意这点,直接在20上跑,结果每次NameNode都起在20上,但是Secondary起在21上,然后21老是报name路径拿不到lock的错误,害得我折腾半天,另外没有配置DataNode的时候,测试要把slaves里面的节点都屏蔽,要不然就跟着一块儿起来了。

另外像我这种情况20和21的slaves文件内容是不同的,ResourceManager对应的NodeManager,NameNode对应DataNode。

Hive篇

网上翻了这么多文档,官方的私人的,就没有一个人提到,默认的用户名密码是hive/hive。

hive-site.xml的配置,如果用template的话配置项太多,找起来不方便,其实最简洁的就是
<configuration>
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://localhost:3306/hive?characterEncoding=UTF-8</value>
</property>
<property>
<name>javax.jdo.option.ConnectionDriverName</name>
<value>com.mysql.jdbc.Driver</value>
</property>
<property>
<name>javax.jdo.option.ConnectionUserName</name>
<value>hive</value>
</property>
<property>
<name>javax.jdo.option.ConnectionPassword</name>
<value>mysql</value>
</property>
<property>
<name>hive.server2.thrift.port</name>
<value>10000</value>
</property>
<property>
<name>hive.server2.authentication</name>
<value>NONE</value>
</property>
<property>
<name>hive.server2.enable.doAs</name>
<value>true</value>
</property>
<property>
<name>hive.server2.transport.mode</name>
<value>binary</value>
</property>
<property>
<name>hive.server2.thrift.min.worker.threads</name>
<value>5</value>
</property>
<property>
<name>hive.server2.thrift.max.worker.threads</name>
<value>500</value>
</property>
<property>
<name>hive.server2.thrift.bind.host</name>
<value><span style="color:#ff0000;">10.128.84.21</span></value>
</property>
<property>
<name>hive.server2.thrift.http.port</name>
<value>10001</value>
</property>
<property>
<name>hive.server2.thrift.http.min.worker.threads</name>
<value>5</value>
</property>
<property>
<name>hive.server2.thrift.http.max.worker.threads</name>
<value>100</value>
</property>
</configuration>


特别要注意的就是hive.server2.thrift.bind.host这个配置项,如果写localhost的话倒是可以在本机上用beeline登陆,但是在别的机器上就登不上去了,因为别人不知道这台机器的localhost是什么,要写HIVE所在机器的IP地址才可以。

ODBC驱动也是另外一个大坑,HANA用SDA去连接HIVE的时候需要建立ODBC连接,关键就是.odbc.ini文件的设置,虽然相关的文档写得比较详细,但有些已经过时,现在hive1.0.0以后已经弃用了hiveserver而改用hiveserver2,所以应该是这样配的:
[hive1]

Description=Simba Hive ODBC Driver (64-bit) DSN

Driver=/opt/simba/hiveodbc/lib/64/libsimbahiveodbc64.so

DriverUnicodeEncoding=1

HOST=10.128.84.21
PORT=10000
HiveServerType=2
HS2AuthMech=2
UserName=hive
Password=hive
Schema=default
DeaultStringColumnLength=10240


Hive读文件限制很多,行分隔符不能设置,只能是'\n'换行,列分隔符只能是一个字符。

Hive JDBC 是不支持Insert value的,只能从文件加载和通过子查询来获取数据。最新的0.14开始支持逐条记录insert、update和delete了,但是也是限制多多,具体可以参考这篇博客,需要特别注意的是,还需要把metastore的数据库的autocommit关掉,否则运行sql的时候会报错。

之后执行insert的时候仍不成功,通过beeline执行的时候会报错,这篇博客讨论了/tmp目录下的文件权限问题。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: