##前言
Kylin的官网上,关于安装部分,只有寥寥数语,但是很多人在安装Kylin的时候,都遇到各种问题。那么这个到底是什么情况呢? 原因很简单:Kylin的check-env.sh,有点弱。很多时候,用户在安装kylin时候,并没有花太多时间去准备基础环境,匆匆忙忙就开始安装了,然后依赖于check-env.sh来检查环境,以为通过了就肯定没事。最后就陷入各种莫名其妙的错误,无法自拔。
##前提条件
Kylin的安装关键,并不在Kylin本身,而是在基础环境。Kylin依赖4大组件,hdfs,hive,hbase和zookeeper。Kylin能不能正常运行,和上述4大组件是否运行正常,以及是否能够在安装Kylin的主机上,以客户端方式正常访问,有着莫大的关系。
- 和hdfs的关系
kylin依赖于hdfs存储数据,所以kylin要有hdfs的写权限,必须有/kylin目录 - 和hive的关系
kylin需要在hive里建表,所以必须有hive的建表权限 - 和yarn的关系
kylin的作业都是map reduce作业,是通过yarn管理的。kylin会读取yarn中作业的状态,以判断作业的状态。yarn的history log如果没有配好,会导致kylin无法找到单步作业运行的正确状态,结果无法转到下一步。
##安装步骤
环境检查
#hdfs检查
#使用hadoop命令,检查集群上的配置
hadoop fs -ls /kylin #检查是否有kylin目录
hadoop fs -ls /user/history #检查是否有history目录
#hive检查
#使用hive或者beeline登录集群
应用安装
- 下载最新的包,这个没有问题。
cd /usr/local/bin
wget http://apache.fayea.com/kylin/apache-kylin-1.6.0/apache-kylin-1.6.0-cdh5.7-bin.tar.gz
tar zxvf apache-kylin-1.6.0-cdh5.7-bin.tar.gz
- 执行检查程序
# /usr/local/bin/apache-kylin-1.6.0-cdh5.7-bin/bin.check-env.sh
提示permission denied的错误。原来此处要用hadoop用户,才能在hdfs上创建目录。别看你是系统管理员,一样权限不足。解决的方法是:
```
su - hdfs
/usr/local/bin/apache-kylin-1.6.0-cdh5.7-bin/bin.check-env.sh
```
这次就检查通过了。
kylin的文档,真的不怎么样,所以只能自己去找答案.
踩坑之用户管理
Kylin的用户管理,居然没有文档,只有一个很简单的faq里,很隐晦的提了一句。 Kylin采用多种方式管理用户。最简单的是自己在配置文件里管理用户。用户名是明文,密码是经过encode的密文。 具体的配置文件为:/opt/apache-kylin-2.0.0-bin/tomcat/webapps/kylin/WEB-INF/classes/kylinSecurity.xml 要修改的地方在:
<beans profile="testing">
<util:list id="adminAuthorities"
value-type="org.springframework.security.core.authority.SimpleGrantedAuthority">
<value>ROLE_ADMIN</value>
<value>ROLE_MODELER</value>
<value>ROLE_ANALYST</value>
</util:list>
<util:list id="modelerAuthorities"
value-type="org.springframework.security.core.authority.SimpleGrantedAuthority">
<value>ROLE_MODELER</value>
<value>ROLE_ANALYST</value>
</util:list>
<util:list id="analystAuthorities"
value-type="org.springframework.security.core.authority.SimpleGrantedAuthority">
<value>ROLE_ANALYST</value>
</util:list>
<bean class="org.springframework.security.core.userdetails.User" id="adminUser">
<constructor-arg value="ADMIN"/>
<constructor-arg
value="$2a$10$o3ktIWsGYxXNuUWQiYlZXOW5hWcqyNAFQsSSCSEWoC/BRVMAUjL32"/>
<constructor-arg ref="adminAuthorities"/>
</bean>
<bean class="org.springframework.security.core.userdetails.User" id="modelerUser">
<constructor-arg value="MODELER"/>
<constructor-arg
value="$2a$10$o3ktIWsGYxXNuUWQiYlZXOW5hWcqyNAFQsSSCSEWoC/BRVMAUjL32"/>
<!--
value="$2a$10$Le5ernTeGNIARwMJsY0WaOLioNQdb0QD11DwjeyNqqNRp5NaDo2FG"/>
-->
<constructor-arg ref="modelerAuthorities"/>
</bean>
<bean class="org.springframework.security.core.userdetails.User" id="analystUser">
<constructor-arg value="ANALYST"/>
<constructor-arg
value="$2a$10$o3ktIWsGYxXNuUWQiYlZXOW5hWcqyNAFQsSSCSEWoC/BRVMAUjL32"/>
<!--
value="$2a$10$s4INO3XHjPP5Vm2xH027Ce9QeXWdrfq5pvzuGr9z/lQmHqi0rsbNi"/>
-->
<constructor-arg ref="analystAuthorities"/>
</bean>
<bean id="kylinUserAuthProvider"
class="org.apache.kylin.rest.security.KylinAuthenticationProvider">
<constructor-arg>
<bean class="org.springframework.security.authentication.dao.DaoAuthenticationProvider">
<property name="userDetailsService">
<bean class="org.springframework.security.provisioning.InMemoryUserDetailsManager">
<constructor-arg>
<util:list
value-type="org.springframework.security.core.userdetails.User">
<ref bean="adminUser"></ref>
<ref bean="modelerUser"></ref>
<ref bean="analystUser"></ref>
</util:list>
</constructor-arg>
</bean>
</property>
<property name="passwordEncoder" ref="passwordEncoder"></property>
</bean>
</constructor-arg>
</bean>
<!-- user auth -->
<bean id="passwordEncoder"
class="org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder"/>
<scr:authentication-manager alias="testingAuthenticationManager">
<!-- do user ldap auth -->
<scr:authentication-provider ref="kylinUserAuthProvider"></scr:authentication-provider>
</scr:authentication-manager>
</beans>