背景介绍
在使用Impala的项目中,我们会以Client/Server的部署方式在hadoop的集群节点启动impala-server、impala-state-store和impala-catalog服务,但是在使用中无法动态调整impala使用内存和CPU的分配。CDH5之后,Impala开始支持Impala-on-yarn模式,通过一个叫做Llama(Long-Lived Application Master)的中间系统协调Yarn和Impala,Llama的作用就是使Impala能够工作在YARN之上,使得Impala和YARN共享集群资源,提供低延迟的查询,Llama主要服务于Impala和Yarn之间的协作,因此安装Llama必须确保Impala和Yarn服务的安装。需要注意的是:Llama 仅支持 YARN,不能与 MRv1 结合使用,同时,Llama 也是通过 YARN 的配置文件与 Hadoop 进行协作的。
Llama是位于 Cloudera Impala 和 Hadoop YARN 之间,用于协调资源管理的服务系统。在一个 Hadoop 集群中,Impala 可以通过 Llama 预约、使用以及释放资源分配,以减少执行Impala 查询时过多的资源管理用度。只有在 Impala 中启用资源管理,集群中的 Llama 服务才真正运作。默认情况下,YARN 根据 MapReduce 工作的需要按位分配资源,而 Impala 则需要所有资源在同一时间可用,以保证查询的中间结果能够在不同节点间交换,而不需要拖延查询时间来等待新的资源分配,Llama就是为了在每个 Impala 查询开始执行前就可保证其需要的资源都可用而出现。若一个查询执行完毕,Llama 会将资源进行缓存,确保在执行 Impala 子查询时可以使用。这种缓存机制避免了每个查询执行前都需要进行新的资源请求。同时,如果 YARN 需要该资源用于其他工作,Llama就会将这部分资源还给 YARN。
安装LIama AM(Application Master)
实验平台 CDH-5.5,LIama AM需要一个本地hadoop客户端,并且可以访问hadoop集群
yum install llama-master
配置文件目录 /etc/llama/conf/
二进制文件目录 /usr/lib/llama/
log目录 /var/log/llama/
PID文件目录 /var/run/llama/
/usr/lib/llama/libexec/llama-env.sh
官方安装:LImam install
LIama AM配置文件
LIama AM的配置文件目录里面有三个配置文件:
llamaadmin-site.xml
llama-log4j.properties 修改完直接生效
llama-site.xml 修改完需要重启生效
llamaadmin-site.xml配置
llamaadmin.server.thrift.address 配置为LIama AM的本地IP
llama-site.xml配置
llama.am.server.thrift.address 修改为LIama AM的本地IP
llama.nm.server.thrift.address 修改为LIama NM的本地IP
配置LImam AM的YARN依赖
LImam使用Hadoop YARN的Fair Scheduler队列对用户资源进行限制,所以,要使LIama正常工作,必须配置Fair Scheduler队列,fair-scheduler.xml配置文件必须在LIama AM的配置文件目录或者在LIama的CLASSPATH中。LIama只使用CPU或者Memory资源,运行LIama AM的用户必须在hadoop中配置为自己的代理用户。
yarn-site.xml追加
<property>
<name>yarn.scheduler.minimum-allocation-mb</name>
<value>1024</value>
</property>
<property>
<name>yarn.scheduler.minimum-allocation-vcores</name>
<value>1</value>
</property>
core-site.xml追加
<property>
<name>hadoop.proxyuser.llama.hosts</name>
<value>*</value>
</property>
<property>
<name>hadoop.proxyuser.llama.groups</name>
<value>*</value>
</property>
安装LIama NM(NodeManager) Auxiliary Service
LIama AM安装完毕后有一个lib目录(/usr/lib/llama/lib),该lib目录中的JAR文件必须添加到YARN集群中所有NodeManagers节点的CLASSPATH中。当配置完成后,LIama NM服务会随着YARN NM服务的启动而启动。
LIama NM配置
LIama NM辅助服务的配置文件是llama-site.xml,它必须拷贝到NM的配置文件目录,任何llama-site.xml的变更,都需要重启生效。
配置LImam NM的YARN依赖
yarn-site.xml追加
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle,llama_nm_plugin</value>
</property>
<property>
<name>yarn.nodemanager.aux-services.llama_nm_plugin.class</name>
<value>com.cloudera.llama.nm.LlamaNMAuxiliaryService</value>
</property>
ps:mapreduce_shuffle不是LIama NM必须的,mapreduce_shuffle是Map-Reduce Job在YARN中需要的
Lib库引用
ln -s /usr/lib/llama/llama-1.0.0-cdh5.10.0.jar /usr/lib/hadoop/lib/
ln -s /usr/lib/llama/lib/metrics-core-3.0.1.jar /usr/lib/hadoop/lib/
ln -s /usr/lib/llama/lib/libthrift-0.9.0.jar /usr/lib/hadoop/lib/
LIama HA(选做)
<property>
<name>llama.am.ha.enabled</name>
<value>false</value>
</property>
<property>
<name>llama.am.ha.zk-quorum</name>
<value></value>
</property>
<property>
<name>llama.am.ha.zk-base</name>
<value>/llama</value>
</property>
<property>
<name>llama.am.ha.zk-timeout-ms</name>
<value>10000</value>
</property>
<property>
<name>llama.am.cluster.id</name>
<value>llama</value>
</property>
Impala对接LIama
impalad server安装cgroup
yum install libcgroup -y
创建cpu hierarchy
mkdir /cgroup/cpu/
启动cgroup
/etc/init.d/cgconfig start
修改impalad配置
/etc/default/impala文件中,MPALA_SERVER_ARGS追加
IMPALA_CATALOG_SERVICE_HOST=xxxxxx
IMPALA_STATE_STORE_HOST=xxxxxx
IMPALA_STATE_STORE_PORT=24000
IMPALA_BACKEND_PORT=22000
IMPALA_LOG_DIR=/var/log/impala
IMPALA_CATALOG_ARGS=" -log_dir=${IMPALA_LOG_DIR} -state_store_port=${IMPALA_STATE_STORE_PORT} -state_store_host=${IMPALA_STATE_STORE_HOST}"
IMPALA_STATE_STORE_ARGS=" -log_dir=${IMPALA_LOG_DIR} -state_store_port=${IMPALA_STATE_STORE_PORT}"
IMPALA_SERVER_ARGS=" \
-use_local_tz_for_unix_timestamp_conversions=true \
-convert_legacy_hive_parquet_utc_timestamps=true \
-log_dir=${IMPALA_LOG_DIR} \
-catalog_service_host=${IMPALA_CATALOG_SERVICE_HOST} \
-state_store_port=${IMPALA_STATE_STORE_PORT} \
-use_statestore \
-state_store_host=${IMPALA_STATE_STORE_HOST} \
-enable_rm=true \
-fair_scheduler_allocation_path=/etc/hadoop/conf/fair-scheduler.xml \
-rm_always_use_defaults=true \
-llama_host=xxxxxx \
-llama_port=15000 \
-cgroup_hierarchy_path=/cgroup/cpu \
-be_port=${IMPALA_BACKEND_PORT}"
ENABLE_CORE_DUMPS=false
# LIBHDFS_OPTS=-Djava.library.path=/usr/lib/impala/lib
# MYSQL_CONNECTOR_JAR=/usr/share/java/mysql-connector-java.jar
# IMPALA_BIN=/usr/lib/impala/sbin
# IMPALA_HOME=/usr/lib/impala
# HIVE_HOME=/usr/lib/hive
# HBASE_HOME=/usr/lib/hbase
# IMPALA_CONF_DIR=/etc/impala/conf
# HADOOP_CONF_DIR=/etc/impala/conf
# HIVE_CONF_DIR=/etc/impala/conf
# HBASE_CONF_DIR=/etc/impala/conf
官方配置详解:impala llama config
参数解释
LIama 非HA模式下impala配置项:
-enable_rm: 该参数用于控制是否启用资源管理,类型为Boolean,默认值为false,表示资源管理未启用,只有在设置为 true 时,资源管理选项才可能生效
-llama_host:Llama 服务所在的主机名或 IP 地址,供 Impala 连接使用。默认值为 127.0.0.1;
-llama_port:Llama 服务端口,,供 Impala 连接使用。默认为 15000;
-llama_callback_port: Impala 启用 Llama 回调服务的端口。Llama 从该服务报告资源的批准或优先占有
-cgroup_hierarchy_path: YARN和Llama创建已批准资源的CGroups的路径,Impala假设一个已分配容器的CGroup在目录'cgroup_hierarchy_path +container_id'下创建。
-rm_always_use_defaults:impala忽略计算的估算值,并始终在查询开始时从LImam获取默认的内存和CPU分配,默认的估算值大约是2CPU/4Gmem,可能根据集群大小和工作负载稍有不同,建议开启,并忽略下面两个参数的值
-rm_default_memory:针对每次查询设置预估的内存使用量,可以是M或者G为单位
-rm_default_cpu_cores:针对每次查询设置预估的CPU使用个数
#-fair_cheduler_allocation_path: fair-scheduler.xml 文件存放位置。启用 Llama 后,YARN默认使用fair-scheduler.xml中定义的调度方式进行资源调度
LImam HA模式下impala的配置项:
-llama_addresses:逗号分隔的LImam HA host:port列表
-llama_max_request_attempts:重试请求的次数,直至请求被取消,默认是5
-llama_registration_timeout_secs:impala向LIama注册或者重新注册的超时时间,默认是30秒,-1表示无限尝试
-llama_registration_wait_secs:每次重复注册的时间间隔,默认3秒
重启impala server
LIama重大问题
LIama在CDH5.5之前版本都是可以使用的,我再次在CDH最新版5.10部署LIama,经过测试发现LIama已经被废弃了,impalad.INFO日志显示如下.....