linux下安装zookeeper报错Syntax error: "(" unexpected (expecting "fi")

Zookeeper是一个协调服务,可以用它来作为配置维护、名字服务、分布式部署;

下面,我来分享一下在Linux下安装Zookeeper的整个步骤,让大家少走弯路。


一、Zookeeper下载

  1. [root@localhost 下载]# wget http://mirror.bit.edu.cn/apache/zookeeper/zookeeper-3.3.6/zookeeper-3.3.6.tar.gz  
  2. --2016-01-15 23:15:57--  http://mirror.bit.edu.cn/apache/zookeeper/zookeeper-3.3.6/zookeeper-3.3.6.tar.gz  
  3. 正在解析主机 mirror.bit.edu.cn (mirror.bit.edu.cn)... 114.247.56.117  
  4. 正在连接 mirror.bit.edu.cn (mirror.bit.edu.cn)|114.247.56.117|:80... 已连接。  
  5. 已发出 HTTP 请求,正在等待回应... 200 OK  
  6. 长度:11833706 (11M) [application/octet-stream]  
  7. 正在保存至: “zookeeper-3.3.6.tar.gz”  
  8.   
  9. 100%[======================================================================================================================================================================================>] 11,833,706   171KB/s 用时 68s      
  10.   
  11. 2016-01-15 23:17:07 (170 KB/s) - 已保存 “zookeeper-3.3.6.tar.gz” [11833706/11833706])  


二、解压

  1. [root@localhost deploy]# tar -zxvf /home/lk/下载/zookeeper-3.3.6.tar.gz   

解压完之后,会在deploy文件夹下面得到一个zookeeper-3.3.6的文件夹


三、进入到conf目录
  1. [root@localhost deploy]# cd /opt/deploy/zookeeper-3.3.6/conf  

四、拷贝zoo_samle.cfg为zoo.cfg
  1. [root@localhost conf]# cp zoo_sample.cfg zoo.cfg  


五、编辑zoo.cfg文件
  1. [root@localhost conf]# vi zoo.cfg   

修改为:

  1. # The number of milliseconds of each tick  
  2. tickTime=2000  
  3. # The number of ticks that the initial  
  4. # synchronization phase can take  
  5. initLimit=10  
  6. # The number of ticks that can pass between  
  7. # sending a request and getting an acknowledgement  
  8. syncLimit=5  
  9. # the directory where the snapshot is stored.  
  10. dataDir=/usr/zookeeper  
  11. dataLogDir=/usr/zookeeper/log  
  12. # the port at which the clients will connect  
  13. clientPort=2181  
  14. server.1=192.168.32.129:2888:3888  


六、设置环境变量
  1. [root@localhost conf]# export ZOOKEEPER_INSTALL=/opt/deploy/zookeeper-3.3.6  
  2. [root@localhost conf]# export PATH=$PATH:$ZOOKEEPER_INSTALL/bin  

七、启动
  1. [root@localhost bin]# ./zkServer.sh start  
  2. JMX enabled by default  
  3. Using config: /opt/deploy/zookeeper-3.3.6/bin/../conf/zoo.cfg  
  4. Starting zookeeper ... STARTED  
  5. [root@localhost bin]#   

八、测试zookeeper
  1. [root@localhost bin]# ./zkCli.sh -server 192.168.32.129:2181  


如果是本地连接,那么不需要 -server 192.168.32.129:2181,默认是本地


注意:如果出现拒绝连接,请检查如下:

1、防火墙是否关闭  systemctl stop firewalld

2、需要将192.168.32.129 映射到本地 /etc/hosts文件中,否则无法连接
<think>我们讨论的是HBase Shell输入命令报错的问题。报错可能由多种原因引起,需要根据具体错误信息进行诊断。以下将列出常见错误及解决方法,并给出通用排查步骤。 ### 常见错误类型及解决方法: #### 1. **语法错误** - **现象**:`SyntaxError` 或 `ArgumentError` - **原因**:命令格式错误(如括号不匹配、单引号缺失等) - **示例**: ```bash hbase> create 'test_table, 'cf' # 缺少右单引号 ERROR: SyntaxError: (hbase):1: syntax error, unexpected tSTRING_BEG, expecting ']' ``` - **解决**:检查命令格式,确保引号、括号完整。 #### 2. **表/命名空间不存在** - **现象**:`TableNotFoundException` 或 `NamespaceNotFoundException` - **示例**: ```bash hbase> scan 'non_existent_table' ERROR: TableNotFoundException: non_existent_table ``` - **解决**:使用 `list` 或 `list_namespace_tables` 确认表是否存在。 #### 3. **连接问题** - **现象**:`Can't get master address from ZooKeeper` 或 `Connection refused` - **原因**:HBase集群未启动,或ZooKeeper配置错误 - **解决**: - 检查HBase状态:`hbase-daemon.sh status master` - 检查ZooKeeper:`echo stat | nc <zk_host> 2181` #### 4. **权限问题** - **现象**:`AccessDeniedException` - **原因**:用户无操作权限(启用Kerberos时常见) - **解决**: - 使用 `kinit` 获取Kerberos票据 - 在HBase中授权:`grant '<user>', '<permissions>', '<table>'` #### 5. **版本不兼容命令** - **现象**:`UnsupportedOperationException` - **原因**:HBase版本升级后部分命令弃用(如HBase 2.x移除`merge_region`) - **解决**:查阅对应版本的官方文档。 --- ### 通用排查步骤: 1. **检查错误堆栈**:关注第一行错误类型和最后一行错误详情。 2. **验证命令格式**:使用 `help '<command>'` 查看帮助(如 `help 'create'`)。 3. **确认集群状态**: ```bash hbase shell> status # 输出应包含 "active master" 和 "regionsInTransition=0" ``` 4. **查看日志**: - Master日志:`tail -f $HBASE_HOME/logs/hbase-<user>-master-<hostname>.log` - RegionServer日志:同目录下 `...-regionserver-...log` 5. **网络连通性**: ```bash telnet <zookeeper_quorum> 2181 # 检查ZooKeeper telnet <hbase_master> 16000 # 检查HBase Master ``` --- ### 示例:修复表不存在错误 ```bash # 1. 列出所有表确认是否存在 hbase> list # 2. 若表不存在则创建 hbase> create 'test_table', 'cf' # 3. 重新执行操作 hbase> scan 'test_table' ``` §§相关问题§§ 1. HBase Shell连接ZooKeeper超时可能由哪些原因导致? 2. 如何通过HBase日志定位RegionServer启动失败的问题? 3. Kerberos认证环境下如何配置HBase Shell免密登录? 4. HBase 2.x版本中哪些常用Shell命令已被弃用或修改? 5. 当HBase Shell返回"ERROR: org.apache.hadoop.hbase.PleaseHoldException: Master is initializing"时,应如何处理?</think>### 回答: HBase Shell 输入命令报错时,需要根据错误类型进行排查。以下是常见错误及解决方法: #### **一、通用排查步骤** 1. **检查命令语法**: ```bash help '命令名' # 例如 help 'create' ``` 2. **查看完整错误日志**: ```bash debug '错误命令' # 例如 debug 'scan "broken_table"' ``` 3. **验证集群状态**: ```bash status # 检查集群状态 version # 确认HBase版本 ``` --- #### **二、常见错误及解决方案** | 错误类型 | 典型报错信息 | 解决方法 | |----------|--------------|----------| | **连接错误** | `Can't get master address from ZooKeeper` | 1. 检查ZooKeeper状态<br>2. 验证`hbase-site.xml`配置<br>3. 重启HBase Master | | **语法错误** | `SyntaxError: (hbase):x: syntax error` | 1. 检查引号/括号是否配对<br>2. 避免使用中文符号<br>3. 使用`help`查看正确格式 | | **表不存在** | `TableNotFoundException: 'table_name'` | 1. 用`list`确认表存在<br>2. 检查命名空间前缀<br>3. 重建缺失表 | | **权限问题** | `AccessDeniedException: Insufficient permissions` | 1. 使用`user_permission`查看权限<br>2. 通过`grant`赋权<br>3. 检查Kerberos认证 | | **超时错误** | `CallTimeoutException: Call id=x timed out` | 1. 增加超时时间:`hbase.client.operation.timeout`<br>2. 检查RegionServer负载 | | **版本冲突** | `UnsupportedOperationException` | 1. 确认HBase版本兼容性<br>2. 检查客户端/服务端版本是否匹配 | --- #### **三、特殊场景处理** **场景1:RegionServer宕机导致报错** ```bash # 查看RegionServer状态 hbase hbck -details # 恢复步骤 assign '故障Region名' enable '表名' ``` **场景2:元数据损坏** ```bash # 修复.META.表 hbase hbck -repair ``` **场景3:HDFS权限问题** ```bash # 检查HDFS权限 hdfs dfs -ls /hbase/data/命名空间/表名 ``` --- #### **四、日志分析位置** | 日志类型 | 路径示例 | 关键信息 | |----------|----------|----------| | Master日志 | `$HBASE_HOME/logs/hbase-*-master-*.log` | 启动异常/ZooKeeper连接 | | RegionServer日志 | `$HBASE_HOME/logs/hbase-*-regionserver-*.log` | 读写超时/Region故障 | | ZooKeeper日志 | `$ZOOKEEPER_HOME/zookeeper.out` | 会话超时/连接拒绝 | > ⚠️ **注意**:修改配置后需重启生效,重要操作前备份元数据