Comments (6)
Sorry for the late response here!
net
already has an interface for this: net.Dialer
. It should be an option for Client
- and then used for both the namenode connection and the blockwriter connections - but we're getting to kind of an awkward place with so many options. Might be time to add a ClientOptions
thingy, and deprecate the old constructors.
from hdfs.
Sorry, as soon as I hit post I realized net.Dialer
is a struct, not an interface. That makes it a bit trickier, but I think we can take net/http
s approach and have a DialFunc func(network, address string) (net.Conn, error)
option.
(net.Dialer
lets you specify a timeout which is used when you call Dial
; DialTimeout
is just a convenience method for that.)
from hdfs.
i think we should also use rather net.DialContext
since that is the recommended way now.
for the interface
we could do something like this (since New(....)
is already taken):
type ClientOptions struct {
Address string
Username string
DialFunc func(ctx context.Context, network, addr string) (net.Conn, error)
}
func NewClient(options ClientOptions) (*Client, error)
alternatively i also like the functional options pattern that would looke something like this:
type ClientOption func(*Client) error
func Address(address string) ClientOption
func Username(username string) ClientOption
func DialFunc(dialFn func(ctx context.Context, network, addr string) (net.Conn, error)) ClientOption
func NewClient(options ..ClientOption) (*Client, error)
and it could be used like this:
func main(){
dialer, err := proxy.SOCKS5("tcp", "localhost:8157", nil, proxy.Direct)
if err != nil {
panic(err)
}
hdfsCli, err := hdfs.NewClient(
hdfs.Address("127.0.0.1:8020"),
hdfs.Username("hadoop"),
hdfs.DialFunc(dialer.Dial),
)
}
this does not entirely work for my usecase since proxy
does not have DialContext
yet , but it will eventually, and for the time being it can be wrapped
in both cases one would have to pass the DialFunc
to the BlockWriter
. It could be done by passing it to NamenodeConnection
.
what do you think ?
from hdfs.
The former sounds right - and you're totally correct about DialContext
rather than Dial
. Let me take a stab at the options thing without a dialfunc first.
from hdfs.
Ok, this is going to be a bit painful. We need to thread the dialer down into:
BlockReader
andChecksumReader
(and deprecateNewBlockReader
, or something)BlockWriter
(this takes theNamenodeConnection
, though, so the signature doesn't need to change there)NamenodeConnection
(which means deprecatingNewNamenodeConnection
)- and, of course,
Client
from hdfs.
With #77, there now exists a ClientOptions struct, so this should now be implementable.
from hdfs.
Related Issues (20)
- When you use the go client to access the HDFS with kerberos and RBAC enabled, you cannot read and write properly. If RBAC is disabled, you can read and write properly
- Configuration files not properly parsed HOT 3
- Can I set more configuration when access hdfs?
- Skip optimization on internal/block_reader.go can lead to incorrect data read from stream HOT 1
- Files written by this library are unreadable by clickhouse HOT 2
- Is it thread-safe that NamenodeConnection?
- could not find "github.com/colinmarc/hdfs/v2/protocol/hadoop_common" "github.com/colinmarc/hdfs/v2/security"
- support UserGroupInformation
- EC not working properly HOT 1
- Allow setting CreateFlag when creating files
- Namenodes not been filtered by fs.defaultFS
- the dns_canonicalize_hostname value not being respected
- panic: mkdir /demo: read tcp 192.168.10.1:57318->192.168.10.102:9870: wsarecv: An established connection was aborted by the software in your host machine.
- how to do setQuota
- Empty file after CopyToRemote HOT 1
- Readme suggestion: also show memory usage advantage HOT 2
- Why the return of func Read() with a FileReader is not consistent?
- Downloading the encrypted file HOT 2
- Libhdfs.so bindings for hdfs-go? HOT 1
- hadoop3 - write: broken pipe
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from hdfs.