SQuirrel client UI 操作hbase 及 spark with phoenix 写hbase 遇到的一些问题总结
1:在SQuirrel里如果创建table的时候,不指定namespace,则表是创建在default 空间的,在UI上无法看到,但是在phoenix sqlline 命令行可以看到,如下表LOT7
2:phoenix sql里,如果用引号将表名或列族名或列名括起来,则创建的表保持原来的大小写状态,如果没有用引号括起来,则转为大写形式,在后续访问的时候需要特别注意大小写问题
3:通常先创建schema,然后在schema 上创建table,schema类似数据库:
4:创建表的时候,可以指定列族,也可以不指定列族,如果没有指定列族,则没有列族,只有列名,如上图所示是指定了列族的
5:在spark 应用成员里,通过phoenix 写hbase的时候,如果表没有列族,则可以使用dataframe sql 直接写如hbase,要注意列的大小写问题
但是如果表是有列族的,则需要将dataframe的列先转换成别名的方式,再写入hbase,要特别注意的是,在spark中,列族或列名会转成大写形式,要和hbase里的大小写保持一致,否则会写入失败
6:如果是从hbase shell里创建的表,那在phoenix里是无法看到的,需要做phoenix schema 到 hbase namespace的转换,那么需要先修改hbase-site.xml:
<property> <name>phoenix.schema.isNamespaceMappingEnabled</name> <value>true</value> </property> <property> <name>phoenix.schema.mapSystemTablesToNamespace</name> <value>true</value> </property>
7:在spark 中通过phoenix 访问hbase的时候,需要修改相应的spark配置,并将phoenix-spark jar 包拷贝到spark jar 目录