首页 技术 正文
技术 2022年11月16日
0 收藏 360 点赞 4,318 浏览 13914 个字

1.配置/etc/yum.repos.d

clouder-kudu.repo

[cloudera-kudu]
# Packages for Cloudera’s Distribution for kudu, Version 5, on RedHat or CentOS 6 x86_64
name=Cloudera’s Distribution for kudu, Version 5
baseurl=http://archive.cloudera.com/kudu/redhat/6/x86_64/kudu/5/
gpgkey = http://archive.cloudera.com/kudu/redhat/6/x86_64/kudu/RPM-GPG-KEY-cloudera
gpgcheck = 1

cloudera-impala.repo 

[cloudera-impala]
name=Impala
baseurl= http://archive.cloudera.com/impala/redhat/6/x86_64/impala/2.0.0/
gpgkey = http://archive.cloudera.com/impala/redhat/6/x86_64/impala/2.0.0/RPM-GPG-KEY-cloudera
gpgcheck = 1

2.安装kudu

yum install kudu #Kudu的基本包 
yum install kudu-master # KuduMaster 
yum install kudu-tserver # KuduTserver 
yum install kudu-client0 #Kudu C ++客户端共享库 
yum install kudu-client-devel # Kudu C ++客户端共享库 SDK

yum install ntpd -y

yum install cyrus-sasl*

3.安装impala

yum install impala

yum install impala-server

yum install impala-catalog

yum install impala-shell

yum install impala-state-store

yum install impala-udf-devel

配置protobuf2.5:https://github.com/google/protobuf/releases/

4.启动kudu

安装完成之后,在/etc/kudu/conf目录下有两个文件:master.gflagfile和tserver.gflagfile master.gflagfile的配置修改为(目录可以根据自己的习惯来制定,但在启动kudu之前一定要事先创建好,否则master无法正常启动) –fromenv=rpc_bind_addresses–fromenv=log_dir –fs_wal_dir=/home/data/kudu/master–fs_data_dirs=/home/data/kudu/master tserver.gflagfile修改为: –fromenv=rpc_bind_addresses–fromenv=log_dir –fs_wal_dir=/home/data/kudu/tserver–fs_data_dirs=/home/data/kudu/tserver–tserver_master_addrs=hadoop1:7051 注意,这里的–tserver_master_addrs指明了集群中master的地址,指向同一个master的tserver形成了一个kudu集群 可能遇到的问题: 根据官网的介绍,配置完成之后就可以启动kudu了,启动master和tserver的命令分别为: sudo service kudu-master startsudo service kudu-tserver startsudo service ntpd start再次启动kudu,还是报错,查看日志,发现是对/home/data/kudu没有操作权限。这个目录是我用root账号创建的,但kudu的启动默认会使用一个叫kudu的用户。执行下列命令来改变目录的所有者:cd /home/data/kuduchown -R kudu:kudu ./* 再次执行启动master(在hadoop1这台服务器上启动)和tserver(在hadoop1,hadoop2,hadoop3这三台服务器上都启动)的命令,终于成功了。 在浏览器上通过http://<_host_name_>:8051 和 http://<_host_name_>:8050 可以分别查看master和tserver的详情

5.启动impala

# service impala-state-store start
# service impala-catalog start
# service impala start

impalad – Impala的守护进程. 计划执行数据查询在HDFS和HBase上。 在集群中的每个数据节点上运行一个守护进程

statestored – 跟踪集群中的所有impala实例的状态,在集群中的一个节点上运行该程序。

catalogd – Metadata协调服务 impala-shell – 命令行接口

配置环境
  1.修改/etc/default/bigtop-utils文件
    export JAVA_HOME=/usr/java/jdk1.8 //设置java home
  2.修改/etc/default/impala文件
    IMPALA_CATALOG_SERVICE_HOST=10.1.6.69 //为catalog主机Ip 也可以主机名 注意配置hosts
    IMPALA_STATE_STORE_HOST=10.1.6.69  //为state-store主机Ip
    IMPALA_LOG_DIR=/data/log/impala //配置日志路径 默认为/var/log/impala
  3.在/etc/impala/conf.dist目录下 添加core-site.xml和hdfs-site.xml文件(建议从hadoop配置文件中拷贝)
    其中core-site.xml添加内容如下:
      <!– impala –>
      <property>
        <name>dfs.client.read.shortcircuit</name> 
        <value>true</value>
      </property>
      <property>
        <name>dfs.client.read.shortcircuit.skip.checksum</name>
        <value>false</value>
      </property>
      <property> 
        <name>dfs.datanode.hdfs-blocks-metadata.enabled</name> 
        <value>true</value>
      </property>

    hdfs-site.xml添加内容如下:
      <!–impala–>
      <property>
        <name>dfs.datanode.hdfs-blocks-metadata.enabled</name>
        <value>true</value>
      </property>
      <property>
        <name>dfs.block.local-path-access.user</name>
        <value>impala</value>
      </property>
      <property>
        <name>dfs.client.file-block-storage-locations.timeout.millis</name>
        <value>60000</value>
      </property>

5.1.启动服务
  service impala-catalog start
  service impala-state-store start
  service impala-server start
5.2.验证
  第一种方式:
    ps -aux|grep impala-catalog
    ps -aux|grep impala-state
    ps -aux|grep impalad
  第二种方式:
    impala-shell(默认连接本机的server)
    impala-shell -i 172.16.104.120 //连接指定ip的server impala-shell 如果是no connect状态 可以输入connect 172.16.104.120进行连接
   第三种方式(webUI):
    172.16.104.120:25000
    172.16.104.120:25010
    172.16.104.120:25020
5.3.其他
  Impala Daemon(Impala 守护进程前端端口):21000 >> impala-shell, Beeswax, Cloudera ODBC 1.2 驱动 用于传递命令和接收结果
  Impala Daemon(Impala 守护进程前端端口):21050 >> 被使用 JDBC 或 Cloudera ODBC 2.0 及以上驱动的诸如 BI 工具之类的应用用来传递命令和接收结果
  Impala Daemon(Impala 守护进程后端端口):22000 >> Impala 守护进程用该端口互相通讯
  Impala Daemon(StateStore订阅服务端口):23000 >> Impala 守护进程监听该端口接收来源于 state store 的更新
  StateStore Daemon(StateStore 服务端口):24000 >> State store 监听该端口的 registration/unregistration 请求
  Catalog Daemon(StateStore 服务端口):26000 >> 目录服务使用该端口与Imp

  Impala Daemon(HTTP 服务器端口):25000 >> Impala web 接口,管理员用于监控和故障排除
  StateStore Daemon(HTTP 服务器端口):25010 >> StateStore web 接口,管理员用于监控和故障排除
  Catalog Daemon(HTTP 服务器端口):25020 >> 目录服务 web 接口,管理员用于监控和故障排除,Impala 1.2 开始使用

6.注意事项

使用二进制包安装Impala,与Hadoop 2.4.1配合使用。但没有成功。Hadoop 2.4.1使用的Protobuf库的版本为2.5,而Impala使用的Profobuf库的版本为2.4a。二者版本不匹配,impalad启动失败

使用Hadoop的protobuf库替掉impala的lib目录下的其他版本protobuf,仍然没有解决问题。

怀疑是Impala版本代码中,已经基于老版本protobuf的API进行开发。需要基于新版本protobuf,重新编译impala源代码。

impala启动错误1:
Failed on local exception:
com.google.protobuf.InvalidProtocolBufferException: Message missing required fields: callId, status; Host Details : local host is: “database32/127.0.1.1”; destination host is: “localhost”:9000;
原因:
hadoop2.6的protobuf版本为2.5,为impala用的版本为protobuf2.4
解决:
将hadoop的版本降低时与impala的版本匹配,这里impala采用二进制方式安装,无法
重新编译,解决为将hadoop的版本与impala版本一致。我下载的hadoop为hadoop-2.0.0-cdh4.1.0,impala为impala_1.4.0

7.Cloudera Impala 编译、安装与配置

mpala是由Cloudera开发的高性能实时计算工具,相比Hive性能提升了几十、甚至近百倍,基本思想是将计算分发到每个 Datanode所在的节点,依靠内存实现数据的缓存进行快速计算,类似的系统还有Berkeley的Shark。从实际测试来看,Impala效率确实 不错,由于Impala大量使用C++实现,不使用CDH的Image而自己编译安装要费不少功夫,这里记录一下安装配置过程和碰到的一些问题。我在测试 时候使用的是CentOS6.4。 
一些基本的安装步骤在这里,但我在安装的时候碰到一些问题,这里再详细说明一下过程。

1.安装所需的依赖lib,这一步没有什么不同

sudo yum install boost-test boost-program-options libevent-devel automake libtool flex bison gcc-c++ openssl-devel make cmake doxygen.x86_64 glib-devel boost-devel python-devel bzip2-devel svn libevent-devel cyrus-sasl-devel wget git unzip

2.安装LLVM ,按照流程做即可,注意要在多台机器上编译安装Impala的话,只用在一台机器上执行下面蓝色的部分,再把llvm分发到多台机器上执行后面红色部分的指令就可以了,没必要每个机器都通过svn下载一遍源代码,很费时。

wget http://llvm.org/releases/3.2/llvm-3.2.src.tar.gz 
tar xvzf llvm-3.2.src.tar.gz 
cd llvm-3.2.src/tools 
svn co http://llvm.org/svn/llvm-project/cfe/tags/RELEASE_32/final/ clang 
cd ../projects 
svn co http://llvm.org/svn/llvm-project/compiler-rt/tags/RELEASE_32/final/ compiler-rtcd .. 
./configure –with-pic 
make -j4 REQUIRES_RTTI=1 
sudo make install

3.安装Maven ,这个没什么好说的,按照步骤,设置一下环境变量即可,Maven是为了后面build impala源代码用的。

wget http://www.fightrice.com/mirrors/apache/maven/maven-3/3.0.4/binaries/apache-maven-3.0.4-bin.tar.gz 
tar xvf apache-maven-3.0.4.tar.gz && sudo mv apache-maven-3.0.4 /usr/local

修改~/.bashrc,增加maven环境变量

export M2_HOME=/usr/local/apache-maven-3.0.4 
export M2=$M2_HOME/bin 
export PATH=$M2:$PATH

更新环境变量,查看mvn版本是否正确

source ~/.bashrc 
mvn -version

4.下载Impala源代码

git clone https://github.com/cloudera/impala.git

5.设置Impala环境变量,编译时需要

cd impala 
./bin/impala-config.sh

6.下载impala依赖的第三方package

cd thirdparty 
./download_thirdparty.sh

注意这里其中一个包cyrus-sasl-2.1.23可能下载失败,可以自行搜索(CSDN里面就有)下载下来然后解压缩到thirdparty 文件夹,最好是在执行完download_thirdparty.sh之后做这一步,因为download_thirdparty.sh会把所有目录下下 载下来的tar.gz给删除掉。

7.理论上现在可以开始build impala了 ,但是实际build过程中可能会出现问题,我碰到的问题和 Boost相关的(具体错误不记得了),最后发现是由于boost版本太低导致的,CentOS 6.2系统默认yum源中的boost和boost-devel版本是1.41,但是impala编译需要1.44以上的版本,因此需要做的是自己重新编 译boost,我用的是boost 1.46版本。

#删除已安装的boost和boost-devel 
yum remove boost 
yum remove boost-devel 
#下载boost 
#可以去(http://www.boost.org/users/history/)下载boost 
#下载后解压缩 
tar xvzf boost_1_46_0.tar.gz 
mv boost_1_46_0 /usr/local/ 
cd /usr/include 
./bootstrap.sh 
./bjam 
#执行后若打印以下内容,则表示安装成功 
# The Boost C++ Libraries were successfully built! 
# The following directory should be added to compiler include paths: 
# /usr/local/boost_1_46_0 
# The following directory should be added to linker library paths: 
# /usr/local/boost_1_46_0/stage/lib 
#现在还需要设置Boost环境变量和Impala环境变量

export BOOST_ROOT=’/usr/local/boost_1_46_0′ 
export IMPALA_HOME=’/home/extend/impala’

#注意一下,这里虽然安装了boost,但是我在实际使用的时候,编译还是会报错的,报的错误是找不到这个包:#libboost_filesystem-mt.so,这个包是由boost-devel提供的,所以我的做法是把boost-devel给重新装上 
#我没有试过如果之前不删除boost-devel会不会有问题,能确定的是按这里写的流程做是没问题的

yum install boost-devel

8.现在终于可以编译impala了

cd $IMPALA_HOME 
./build_public.sh -build_thirdparty 
#编译首先会编译C++部分,然后再用mvn编译java部分,整个过程比较慢,我在虚拟机上大概需要1-2个小时。 
#Impala编译完后的东西在be/build/debug里面

9.启动impala_shell需要用到的Python

#第一次执行impalad_shell可能会报错,这里需要安装python的两个包:thrift和prettytable,使用easy_install即可 
easy_install prettytable 
easy_install thrift

10. 如果你以为到这里就万事大吉就太天真了,在配置、启动、使用Impala的时候还会有很多奇葩的问题;

问题1:Hive和Hadoop使用的版本 
CDH对版本的依赖要求比较高,为了保证Impala正常运行,强烈建议使用Impala里面thirdparty目录中自带的Hadoop(native lib已经编译好的)和Hive版本。 
Hadoop的配置文件在$HADOOP_HOME/etc/hadoop中,要注意的是需要启用native lib

#修改hadoop的core-site.xml,除了这个选项之外,其他配置和问题2中的core-site.xml一致 
<property > 
  <name > hadoop.native.lib </name > 
  <value > true </value > 
  <description > Should native hadoop libraries, if present, be used. </description > 
</property >

问题2:Impala的配置文件位置 
Impala默认使用的配置文件路径是在bin/set-classpath.sh中配置的,建议把CLASSPATH部分改成

CLASSPATH=\ 
$IMPALA_HOME/conf:\ 
$IMPALA_HOME/fe/target/classes:\ 
$IMPALA_HOME/fe/target/dependency:\ 
$IMPALA_HOME/fe/target/test-classes:\ 
${HIVE_HOME}/lib/datanucleus-core-2.0.3.jar:\ 
${HIVE_HOME}/lib/datanucleus-enhancer-2.0.3.jar:\ 
${HIVE_HOME}/lib/datanucleus-rdbms-2.0.3.jar:\ 
${HIVE_HOME}/lib/datanucleus-connectionpool-2.0.3.jar:

即要求Impala使用其目录下的Conf文件夹作为配置文件,然后创建一下Conf目录,把3样东西拷贝进来:core-site.xml、hdfs-site.xml、hive-site.xml。 
core-site.xml的配置,下面几个选项是必须要配置的,

<?xml version = “1.0” ?> 
<?xml-stylesheet type = “text/xsl” href = “configuration.xsl” ?> 
<configuration > 
<property > 
<name > fs.defaultFS </name > 
<value > hdfs://10.200.4.11:9000 </value > 
</property > 
<property > 
<name > dfs.client.read.shortcircuit </name > 
<value > true </value > 
</property > 
<property > 
<name > dfs.client.use.legacy.blockreader.local </name > 
<value > false </value > 
</property > 
<property > 
<name > dfs.client.read.shortcircuit.skip.checksum </name > 
<value > false </value > 
</property > 
</configuration >

hdfs-site.xml的配置

<?xml version = “1.0” encoding = “UTF-8” ?> 
<?xml-stylesheet type = “text/xsl” href = “configuration.xsl” ?> 
<configuration > 
<property > 
<name > dfs.block.local-path-access.user </name > 
<value > ${your user} </value > 
</property > 
<property > 
<name > dfs.datanode.hdfs-blocks-metadata.enabled </name > 
<value > true </value > 
</property > 
<property > 
<name > dfs.datanode.data.dir </name > 
<value > ${yourdatadir} </value > 
</property > 
<property > 
    <name > dfs.client.use.legacy.blockreader.local </name > 
    <value > false </value > 
</property > 
<property > 
    <name > dfs.datanode.data.dir.perm </name > 
    <value > 750 </value > 
</property > 
<property > 
    <name > dfs.client.file-block-storage-locations.timeout </name > 
    <value > 5000 </value > 
</property > 
<property > 
    <name > dfs.domain.socket.path </name > 
    <value > /home/extend/cdhhadoop/dn.8075 </value > 
</property > 
</configuration >

最后是hive-site.xml,这个比较简单,指定使用DBMS为元数据存储即可(impala必须和hive共享元数据,因为impala无 法create table);Hive-site.xml使用MySQL作为metastore的说明在很多地方都可以查到,配置如下:

<?xml version = “1.0” ?> 
<?xml-stylesheet type = “text/xsl” href = “configuration.xsl” ?> 
<configuration > 
<property > 
  <name > javax.jdo.option.ConnectionURL </name > 
  <value > jdbc:mysql://10.28.0.190:3306/impala?createDatabaseIfNotExist=true</value > 
  <description > JDBC connect string for a JDBC metastore </description > 
</property > 
<property > 
  <name > javax.jdo.option.ConnectionDriverName </name > 
  <value > com.mysql.jdbc.Driver </value > 
  <description > Driver class name for a JDBC metastore </description > 
</property > 
<property > 
  <name > javax.jdo.option.ConnectionUserName </name > 
  <value > root </value > 
  <description > username to use against metastore database </description > 
</property > 
<property > 
  <name > javax.jdo.option.ConnectionPassword </name > 
  <value > root </value > 
  <description > password to use against metastore database </description > 
</property > 
</configuration >

记得把mysql-connector的jar包给拷贝到hive的lib里面去,同样也要拷贝给impala ( 拷贝至$IMPALA_HOME/fe/target/dependency)

11.启动Impala 。到此,Impala是可以正常启动的。这里说明一下,官方文档没有说很清楚Impala的Service之间是如何互相协调的,按照官方的步骤,最后通过如下方法来在一台机器上启动Impala Service:

#启动单机impala service 
${IMPALA_HOME}/bin/start-impalad.sh -use_statestore=false 
#启动impala shell 
${IMPALA_HOME}/bin/impala-shell.sh

然后impala-shell就可以连接到localhost进行查询了;注意,这里只是单机查询,可以用来验证你的Impala是否正常work 了;如何启动一个Impala集群,跳到第12步。这里继续说一下可能遇到的问题,我遇到的一个比较奇葩的问题是show tables和count(1)没有问题,但是select * from table的时候impala在读取数据的时候就崩溃了(有时报错could not find method close from class org/apache/hadoop/fs/FSDataInputStream with signature ()V ),这里修改了两个地方解决这个问题:

a.修改impala的set-classpath.sh并移除$IMPALA_HOME/fe/target/dependency目录中除了hadoop-auth-2.0.0-*.jar之外所有hadoop-*开头的jar包。

#把impala dependency中和hadoop相关的包给弄出来,只保留auth 
mv $IMPALA_HOME/fe/target/dependency/hadoo* $IMPALA_HOME 
mv $IMPALA_HOME/hadoop-auth*.jar mv $IMPALA_HOME/fe/target/dependency 
#修改bin/set-classpath.sh,将$HADOOP_HOME中的lib给加入,在set-classpath.sh最后一行export CLASSPATH之前#添加 
for jar in `ls $HADOOP_HOME/share/hadoop/common/*.jar`; do 
CLASSPATH=${CLASSPATH}:$jar 
done 
for jar in `ls $HADOOP_HOME/share/hadoop/yarn/*.jar`; do 
CLASSPATH=${CLASSPATH}:$jar 
done 
for jar in `ls $HADOOP_HOME/share/hadoop/hdfs/*.jar`; do 
CLASSPATH=${CLASSPATH}:$jar 
done 
for jar in `ls $HADOOP_HOME/share/hadoop/mapreduce/*.jar`; do 
CLASSPATH=${CLASSPATH}:$jar 
done 
for jar in `ls $HADOOP_HOME/share/hadoop/tools/lib/*.jar`; do 
CLASSPATH=${CLASSPATH}:$jar 
done

b.注意到Impala对待table的时候只能够使用hive的默认列分隔符,如果在hive里面create table的时候使用了自定义的分隔符,Impala servive就会在读数据的时候莫名其妙的崩溃。

12.启动Impala 集群 
Impala实际上由两部分组成,一个是StateStore,用来协调各个机器计算,相当于Master,然后就是Impalad,相当于Slave,启动方法如下:

#启动statestore 
#方法1,直接利用impala/bin下面的这个python脚本 
#这个脚本会启动一个StateStore,同时启动-s个数量的Impala Service在本机 
$IMPALA_HOME/bin/start-impala-cluster.py -s 1 –log_dir /home/extend/impala/impalaLogs 
#方法2,手动启动StateStore 
$IMPALA_HOME/be/build/debug/statestore/statestored -state_store_port=24000

#启动impala service 
#在每个编译安装了impala的节点上执行命令 
#参数-state_store_host指定启动了stateStore的机器名 
#-nn即namenode,指定hadoop的namenode 
#-nn_port是namenode的HDFS入口端口号 
$IMPALA_HOME/bin/start-impalad.sh -state_store_host=m11 -nn=m11 -nn_port=9000

正常启动之后,访问http://${stateStore_Server}:25010/ 可以看到StateStore的状态,其中的subscribers页面可以看到已经连接上的impala service node;

13.使用Impala客户端 
这一步最简单,随便找一个机器启动

$IMPALA_HOME/bin/impala-shell.sh 
#启动之后可以随便连接一个impala service 
connect m12 
#连接上之后就可以执行show tables之类的操作了 
#需要注意的是,如果hive创建表或更新了表结构,impala的节点是不知道的 
#必须通过客户端连接各个impala service并执行refresh来刷新metadata 
#或者重启所有impala service

相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:8,910
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,435
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,250
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,061
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:7,693
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:4,731