hadoop2.4和tez的安装

网上提供的bin包中native下的so文件都是32位的,所以hadoop无法直接启动,启动时会报一大堆错。只能自己编译hadoop。因为是内网,要用代理出去,打包hadoop2.4的时候会有问题,maven的ant plug无法下载tomcat6,编译无法完成,使用路由让本机不使用代理可以打包成功,或只编译,编译后把so文件找出来替换bin包里的so也可以。

hadoop能够运行之后编译tez,需要在关闭hadoop的情况下编译,否则报错。按照官网上的说明配置好后还是不好用,tez-site.xml配置需要注意,网上看到的0.2.0版本的安装配置中写的

<configuration>  
    <property>  
        <name>tez.lib.uris</name>  
       <value>/tez-0.2.0/lib,/tez-0.2.0/</value>  
    </property>  
</configuration>

不再适用0.4.0版本,新版本的配置应该是这样:

 <property>  
        <name>tez.lib.uris</name>  
       <value>${fs.default.name}/tez,${fs.default.name}/tez/lib/</value>  
    </property>  

lib文件夹在后边,而且还得带上${fs.default.name},文件是放在hdfs的根目录的。

测试时会报错:


java.io.IOException: Cannot initialize Cluster. Please check your configuration for mapreduce.framework.name and the correspond server addresses.
    at org.apache.hadoop.mapreduce.Cluster.initialize(Cluster.java:120)
    at org.apache.hadoop.mapreduce.Cluster.<init>(Cluster.java:82)
    at org.apache.hadoop.mapreduce.Cluster.<init>(Cluster.java:75)
    at org.apache.hadoop.mapreduce.Job$9.run(Job.java:1255)
    at org.apache.hadoop.mapreduce.Job$9.run(Job.java:1251)
    at java.security.AccessController.doPrivileged(Native Method)
    at javax.security.auth.Subject.doAs(Subject.java:415)
    at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1548)

则是hadoop_classpath配置不对,要添加tez包,但发现加好了这个配置以后hive启动不了。

还需要在yarn-site.xml中增加如下配置(在网上查到hadoop2.2就有这个问题,还被标记了解决,2.3和2.4仍然存在)。

    <property>  
            <name>yarn.nodemanager.aux-services</name>  
            <value>mapreduce_shuffle</value>  
    </property>

否则会报:

 org.apache.hadoop.yarn.exceptions.InvalidAuxServiceException: The auxService:mapreduce_shuffle does not exist
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:526)
    at org.apache.hadoop.yarn.api.records.impl.pb.SerializedExceptionPBImpl.instantiateException(SerializedExceptionPBImpl.java:152)
    at org.apache.hadoop.yarn.api.records.impl.pb.SerializedExceptionPBImpl.deSerialize(SerializedExceptionPBImpl.java:106)

hadoop正常了,接下来解决hive无法启动的问题。

hive 启动的时候报这个错:

Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/thrift/TException
    at java.lang.Class.forName0(Native Method)
    at java.lang.Class.forName(Class.java:270)
    at org.apache.hadoop.util.RunJar.main(RunJar.java:205)
Caused by: java.lang.ClassNotFoundException: org.apache.thrift.TException
    at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:358)

想了半天,后来忽然明白过来了,这个不是hive报的,是hadoop报的,hive通过hadoop jar 的方式调用了hadoop,而hadoop的hadoop_classpath中没有这个包。原因是改hadoop_classpath的时候写了

export TEZ_CONF_DIR=$HADOOP_HOME/etc/hadoop/tez-site.xml
export TEZ_JARS=$HADOOP_HOME/share/tez
export HADOOP_CLASSPATH=$TEZ_CONF_DIR:$TEZ_JARS/*:$TEZ_JARS/lib/*
所以hive在调hadoop的时候,HADOOP_CLASSPATH没了,最后一句需要写成这样:

export HADOOP_CLASSPATH=${HADOOP_CLASSPATH}:$TEZ_CONF_DIR:$TEZ_JARS/*:$TEZ_JARS/lib/*

hive正常启动了。



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值